EFの各エンティティには主キーが必要です。 Aは多対多のジャンクション・テーブルなので、複数の選択肢があります。
ば完全に削除し、EFは、処理させる、多対多:
public class B
{
public int Id { get; set; }
public virtual ICollection<C> Cs { get; set; }
}
public class C
{
public int Id { get; set; }
public virtual ICollection<B> Bs { get; set; }
}
あなたがしたい場合は、追加のキーを定義する必要がありますいずれかのエンティティとしてA:
public class A
{
public int Id { get; set; }
public B B { get; set; }
public C C { get; set; }
}
かはFKのプロパティを含める必要がありますBとCの両方に合わせて、それらを両方とも複合主キーとしてマークします(dbでも構いません):
public class A
{
public int bId { get; set; }
public int cId { get; set; }
public B B { get; set; }
public C C { get; set; }
}
E DIT:最後のソリューションあなたは間違いなく、それは間違ってやっている他のプロパティなしで説明されているように、Aが正確に見える場合とにかく
modelBuilder.Entity<A>.HasKey(a => new { a.bId, a.cId });
modelBuilder.Entity<A>.HasRequired(a => a.B)
.WithMany()
.HasForeignKey(a => a.bId);
modelBuilder.Entity<A>.HasRequired(a => a.C)
.WithMany()
.HasForeignKey(a => a.cId);
ため
マッピング。マッピングAは、多対多の関係をモデリングするために、他に何かが含まれていればナビゲーションプロパティ/ FKが必要な場合にのみ必要です。
ありがとうございました。しかし、追加のキーや新しいプロパティを追加すると、データを取得しようとしているときにエラーが発生します。 toList()を使用します。どのように私はそれらを除外されるように "合成プライマリーキー"としてマークすることができますか? – r3d
これはプロパティの追加だけでなく、これらのプロパティをデータベース列にマッピングする必要があります(データベースにも存在する必要があります)。これらは除外できません。どのバージョンのEFを使用していますか、どのタイプのマッピングを使用していますか? –
EFバージョンは4.0.30319です。私は "WithMany()。Map(x => x.MapKey(" Id "));"ここで、IdはBのfkであり、cのidは同じです。 2つの新しいIDを追加すると、同じIDにマップすることはできません。 – r3d