1

私は疑問に思っていました(そして「ベストプラクティス」という言葉を使うのは嫌いです)-しかし、これはAAAの構成をカプセル化するので、構成にアプローチするための良い方法ですか?

OnModelCreatingデータベースを作成するための命令の膨大なリストがあり、長いメソッドが何かが静かではないことを教えてくれる例をたくさん見ます。

public class MyContext : DbContext
{
    public MyContext() : base("name=MyDb") { }

    public DbSet<AAA> AAAs { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Configurations.Add(new AAA.Configuration());
    }
}

そして、その構成のためのスポットを持つクラス

public class AAA
{
    [Key] 
    public int Id { get; set; }

    [Required] 
    public string Details { get; set; }

    internal class Configuration : EntityTypeConfiguration<AAA>
    {
        public Configuration()
        {
            // Set all the funky stuff here
        }
    }
}

おそらく正しい方法は1つではないと思います。多くの時間と涙を流す前に、これが世界で絶対に最悪のアイデアである可能性がある理由、または同様のことを行う方法があるかどうかを探しています。

編集

同僚は、静的プロパティを使用する代替方法としてこれを提案しました

public class AAA
{
    [Key] 
    public int Id { get; set; }

    [Required] 
    public string Details { get; set; }

    public static EntityTypeConfiguration<AAA> Configuration
    {
        get { return new AAAConfiguration(); }
    }

}

internal class AAAConfiguration : EntityTypeConfiguration<AAA>
{
   public AAAConfiguration()
   {
            // Set all the funky stuff here
   }
}

構成のインスタンス化方法にもう少し柔軟性があるので、これが好きです。

4

2 に答える 2

3

場合によります。私は今では、dbの生成については気にしないと言っても過言ではありません。それは素晴らしく、私が気にしない利点(プラットフォームに依存しない)があります。SQL Serverを完全に使用することを制限しているため、データベースプロジェクトに戻ります。

これは妥協の世界であり、-申し訳ありませんが-ベストプラクティスには、そこに大量の制限があります。

于 2012-11-25T21:38:19.000 に答える
2

私は個人的にあなたが取ったアプローチに問題は見ていません。最近、頭の中で同様のジレンマを解決しました。唯一の違いはEntityTypeConfiguration<T>、モデル内ではなくデータ層内にクラスがあることです。これらのマッピングクラスでもすべてのマッピングロジックを実行しています。これは、モデルをEF固有の属性で装飾する必要がなく、完全に永続性を無視できることを意味します。

あなたのアプローチでは、OnModelCreatingメソッドでは、永続化するクラスごとに1行だけ必要です。さらに、EFが作成するキャッシュをクリアしない場合、このコードは1回だけヒットするため、これは一種の1回限りです。ブートストラップ、したがって長いメソッドは問題ではありませんか?

あなたのアプローチは良いと思いますが、このテーマについてはいくつかの異なる見解があると確信しています。

于 2012-11-25T21:43:00.703 に答える