2

私はEFがデータベースを生成させる新しいモデルを作成しています。モデルは次のようになります。エンティティフレームワークCTP5、コードファースト。オブジェクトモデルを介して参照テーブルを作成するのを助ける

public class Model 
{ 
    public int Id { get; set; } 
    public string StyleNumber { get; set; } 
    public virtual IList<Metal> Metals { get; set; } 
    public virtual IList<ModelImage> Images { get; set; } 
} 

public class Metal 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

私は、「説明」フィールドには、ユニークであること、2列/ Wの参照テーブルとなる金属をしたいと思います。代わりに、モデルIDを参照する列が追加されたメタルテーブルがEFによって作成されます。データ注釈や流体APIを使用して振る舞いを変更する簡単な方法はありますか?

答えて

3

EFはModel & MetalとModel IDをMetalテーブルに格納することでモデル化する最も簡単な方法の間に1対多の関係があると考えています。 メタルテーブルを「クリーン」(つまり関係データなし)にしたい場合は、関係データを別のテーブルに保存する必要がありますが、これを行うことでモデル&メタル間の関係も暗黙的に変更されます。 実際にこれを実行したい場合は、モデル& Metalの一方向の多対多の関係をEFに伝えることができます。 DbContextのOnModelCreating関数の内部でこれを行うことができます。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany(); 
} 
1

スティーブン・Kの答えは、しかし、それはDesctiptionフィールドのユニークな要件を強制しませんが、金属製のテーブルの外部キーのエントリを除去するための正しいです。残念なことに、EF Code Firstには一意の制約注釈がまだないので、これは彼のせいではありません。

関連する問題