データベースを使ったEFコアにデータ検証を追加する方法

c# ef-database-first entity-framework entity-framework-core validation

質問

私は、ASP.NET Core(RC2)とORM Entity Framework Coreを使用してMVC-Webアプリケーションを実装しています。私は既にデータベース設計をしているので、Scaffold-DBContextコマンドでエンティティモデルを作成する必要があります。

これは正常に動作します。今、検証を追加するために生成されたエンティティにいくつかの注釈を追加したいと思います。たとえば、MaximumLength:

public class Blog
{
    public int BlogId { get; set; }
    [MaxLength(500)]
    public string Url { get; set; }
}

いくつかのデータベースが変更された場合は、scaffoldコマンドを再度使用する必要があります。しかし、この結果、いくつかの追加の注釈が失われてしまいます。エンティティモデルを失うことなく更新するにはどうすればよいですか? asp.netページまたはこのトピックから、それはEF6で可能と思われる。 EF7 / Coreでこれを達成するのと同様の方法はありますか?

人気のある回答

はい、できますData Annotations代わりにFluent APIを使用する必要があります

Fluent API使用例

public  partial class MyContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Blog>()
                .Property(b => b.Url)
                .HasMaxLength(500);
        }
    }

リファレンス: EF core Doc

OPのフィードバック

しかし、データベースコンテキストクラスも生成されます。つまり、コマンドを再度使用すると、古いデータベースコンテキストが置き換えられます。

私のおすすめ :

そのファイルのカスタム実装であるpartialクラスhere.keepを使用することができます。カスタムコードの一部は、コードを再生成するときに上書きされません。

OPのフィードバック:

私は部分的なクラスでそれを解決することができますが、エンティティを生成した後、すべてのエンティティを通過し、すべての重複したプロパティを削除する必要があります。それでもまだエンティティを変更する必要があるので、私が探しているものではありません。

私のおすすめ :

重複したマッピングを削除する必要はありません。 B'cos EFはFluent API優先順位を与えFluent API 。マッピングがコード再生成によって自動的に行われたことは何でも構いません。 Fluent APIを使用するFluent APIオーバーライドすることができFluent API 。これはFluent APIですDataAnnotation Fluent APIFluent APIを同時に使用することもできFluent API 。しかし、コードファーストはFluent API > data annotations > default conventions優先しFluent API > data annotations > default conventions



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ