0

私はEF CTP 5 Code Firstを使用します。あなたはこのようなモデルのためのデータベースを生成するために、EFを依頼する場合、それはあなたのために適切な外部キー関係を作成します。EFで外部キーのプロパティを取り除く方法は?

public class Parent 
{ 
    public ICollection<Child> MyChildren { get; set; } 
} 

public class Child 
{ 
    public Parent MyParent { get; set; } 
} 

子テーブルつもりな世代の結果としてMyParent_Idフィールドのようなものを持っています。今私は逆の問題を抱えている - 私は同様のシンプルなモデルを構築する必要がありますDbのスキーマがあります。同様の単純なことは、明示的な外部キーのプロパティがないことを意味します。それを行う方法はありますか?

私が見つけたマッピングを行う唯一の方法は、このように見えますが、私が避けようとしているモデルでは、パブリックプロパティMyParentIdを持つことを意味します。どのようにそれを避けるために?

public class Child 
{ 
    [Column("ParentID")] 
    public int MyParentId { get; set; } 

    [ForeignKey("MyParentId")] 
    public Parent MyParent { get; set; } 
} 

おかげで、事前に

+1

CTP5以降3つのバージョンがリリースされたので、すぐに[Entity Framework 4.1 Update 1](http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=26825)にアップグレードする必要があります –

+0

Ladislav、良いニュース。私は更新を行います。この情報をありがとう – YMC

答えて

2

一つの方法は、属性を使用するのではなく、コード内であなたのマッピングを定義することです。あなたの「コンテキスト」クラス(DbContextから派生1)の場合:この場合

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<Child>() 
     .HasRequired(c => c.MyParent) 
     .WithMany() 
     .Map(c => c.MapKey("MyParent_Id")); 
} 

、「MyParent_Idは」子テーブルの列の名前ではなく、Childクラス上の任意のプロパティの名前です。 。

+0

それは動作します!私は属性も同じことをすることができると思ったが、EFの流暢な設定が関係を適切に設定する唯一の方法であるように思える。ありがとう。 – YMC

関連する問題