2

EFにデータベースを生成させる新しいモデルを作成しています。モデルは次のようになります。

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; }
}

Metalを2列の参照テーブルにしたいのですが、「Description」フィールドは一意です。代わりに、EFは、モデルIDを参照する追加の列を持つMetalテーブルを作成します。データアノテーションまたはFluidAPIを介して動作を変更する簡単な方法はありますか?

4

2 に答える 2

3

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}
于 2011-01-09T21:44:03.713 に答える
1

Steven Kの答えは、Metalテーブルの外部キーエントリを削除するのに正しいですが、DesctiptionフィールドにUnique要件を強制することはありません。残念ながら、EF Code Firstにはまだ一意の制約注釈がないため、これは彼のせいではありません。

于 2011-01-15T19:04:18.200 に答える