2011-06-28 8 views
2

皆さん、こんにちは皆さん、Entity Framework - エラー:エンティティタイプのキーを定義します。

私は以下の簡単なモデルを持っています。

public class A 
{ 
    public B B { get; set; } 
    public C C { get; set; } 

} 

public class B 
{ 
    public int Id { get; set; } 


} 

public class C 
{ 
    public int Id { get; set; } 

} 

私は、データを取得しようとしていながら、私はエラーを取得する:

System.Data.Edm.EdmEntityType: : EntityType 'A' has no key defined. Define the key for this EntityType.

それは「のRelatedTo」を介して行われていた前。例の助けを借りて誰かにこの問題の解決策がありますか?

ありがとうございます!

答えて

1

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が必要な場合にのみ必要です。

+0

ありがとうございました。しかし、追加のキーや新しいプロパティを追加すると、データを取得しようとしているときにエラーが発生します。 toList()を使用します。どのように私はそれらを除外されるように "合成プライマリーキー"としてマークすることができますか? – r3d

+0

これはプロパティの追加だけでなく、これらのプロパティをデータベース列にマッピングする必要があります(データベースにも存在する必要があります)。これらは除外できません。どのバージョンのEFを使用していますか、どのタイプのマッピングを使用していますか? –

+0

EFバージョンは4.0.30319です。私は "WithMany()。Map(x => x.MapKey(" Id "));"ここで、IdはBのfkであり、cのidは同じです。 2つの新しいIDを追加すると、同じIDにマップすることはできません。 – r3d

関連する問題