2016-04-05 15 views
1

Entity Frameworkで外部キーを苦労しています(1対多の関係)。タイプ 'Class1'のプロパティ 'MyField'のForeignKeyAttributeが無効です

のclass1:

public partial class Class1 
    { 

     public int Id { get; set; } 
     [ForeignKey("Class2_Id")] 
     public Class2 Class2{ get; set; } 
...} 

Class2: 
public partial class Class2 
    { 

     public int Id { get; set; } 
     public virtual ICollection<Class1> Stuff{ get; set; } 
...} 

1)私はfluentAPIで試してみました: 第一試み:

modelBuilder.Entity<Class2>().HasMany<Class1>(p => p.Stuff).WithOptional().Map(m => m.MapKey("Class2_Id")).WillCascadeOnDelete(); 

第二試み:

modelBuilder.Entity<Class1>().HasRequired(i => i.Class2).WithMany().Map(m => m.MapKey("Class2_Id")); 

2)fluentAPIなし: を私は宣言Class2フィールドはこのようになります:

0でも、(おそらく意味をなさないもの)
[Column("Class2")] 
public int Id { get; set; } 

[ForeignKey("Class2")] 
public int Id { get; set; } 

私はいつもこのエラーが出る:

The ForeignKeyAttribute on property 'Class2' on type 'Class1' is not valid. The foreign key name 'Class2_Id' was not found on the dependent type 'Class1'. The Name value should be a comma separated list of foreign key property names.

何が間違っている任意のアイデア?

thxです。

あなたがあなたの中にプロパティとして外部キーを持ってしたくないときにメソッドが使用されている
modelBuilder.Entity<Class2>().HasMany(p => p.Stuff) 
          .WithOptional(c=>c.Class2) 
          .Map(m => m.MapKey("Class2_Id")) 
          .WillCascadeOnDelete(); 

MapKey:あなたは一方向の関係を定義しているので、正しい方法は次のようになり、あなたの流暢API構成で

答えて

1

モデルクラス。あなたは、エンティティのプロパティとしてFK列を表す

使用ForeignKey属性:

public partial class Class1 
{ 

    public int Id { get; set; } 

    public int? Class2_Id{ get; set; } 

    [ForeignKey("Class2_Id")] 
    public Class2 Class2{ get; set; } 
} 

この最後の場合には流暢APIを使用してあなたの関係の設定は次のようになります。

modelBuilder.Entity<Class2>().HasMany(p => p.Stuff) 
          .WithOptional(c=>c.Class2) 
          .HasForeignKey(c=>c.Class2_Id)) 
          .WillCascadeOnDelete(); 
+0

グレート説明octavioccl。ありがとうございます! –

+0

ようこそ);) – octavioccl

関連する問題