2011-12-09 6 views
2

私はいくつかのコードをEF4.1に移行し始めています。子クラスの読み込みに問題があります。EF 4.1の子クラスをマッピングするにはIDプロパティが必要ですか?

私はthis articleを見つけました。子クラスをマップする方法があるように見えますが、親クラスのID列が必要かどうか疑問に思っていました。

私は単純に子クラスへの参照を含めることは "コードなし"と考え、残りは世話をしました。ここで

は現在のオブジェクトモデルです:

public class classMember 
{ 
    public int MemberID {get; set;} 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
} 

public class classReservation 
{ 
    public int ReservationID {get; set;} 
    public classMember Member {get; set;} 
} 

しかしclassReservationをロードするだけで、ヌルメンバーを提供します。

classReservationとclassMemberにMemberIDのプロパティを含める必要がありますか?デザインの観点から見ると冗長に思えます。

答えて

1

まず、あるエンティティから別のエンティティへナビゲーションプロパティを設定するには、それらをPOCO内で仮想として宣言する必要があります。

これは、実行時にEFが実際にリフレクションを使用してPOCOをサブクラス化するためです。ナビゲーションプロパティを機能させるには、そのプロパティをオーバーライドする必要があります。これがvirtualでなければならない理由です。

2番目の質問に答えるために、いいえ、子エンティティから親エンティティへの「外部キープロパティ」は必要ありません。それはEFを助けるが、必要ではない。

エンティティモデルから外部キーのプロパティを削除する処理が進行中です。これを行うには、依然としてEFにdb内の関係をマップする方法を伝える必要があります。これは、メソッドをOnModelCreatingあなたDbContextクラスの中で行うことができます。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<classReservation> 
     .HasRequired(r => r.classMember) 
     .WithMany() 
     .Map(x => x.MapKey("MemberId")); 
} 

また、関係のカーディナリティと多重度に応じて、HasOptional、WithRequiredDependentなどを使用することができます。

+0

ありがとうございました。これはPOCテストコードでは動作しますが、移行するコードベースでは機能しません。それがロードされないようにするには、他にも問題があるはずです。 –

+0

これは明らかに別の問題です。私のオブジェクト階層が完全にロードされていない理由を理解するために[この記事(http://stackoverflow.com/questions/8466929/why-do-some-subobjects-load-and-others-dont)]を作成しました。しかし、私が正しい質問をしていないことを理解するのを助けてくれてありがとう。 –

関連する問題