2017-03-28 12 views
0

私は、Entity FrameworkとCode Firstとの単純な一対多の関係を実装しようとしています。 私は簡単に私の親クラスを設定します。Entity Framework - 子オブジェクトを親に追加する

public class Parent 
{ 
    [Key] 
    public long ParentId { get; set; } 
    public ICollection<Child> Child { get; set; } 

    public Parent() 
    { 
     Child = new HashSet<Child>(); 
    } 
} 

をこれは当然の簡易版です。私の子クラスは親1と同様に簡単です :

public class Child 
{ 
    [Key] 
    public long ChildId { get; set; } 
    public int ParentId { get; set; } 
    public virtual Parent parent { get; set; } 
} 

私のコントローラは、EFによって生成されたものです。 私の投稿メソッドに親IDを持つ子を作成すると、データベースにIDが設定されていますが、親を取得すると、子リストは空になります。

私はそうのようなコントローラで親に子を追加しようとしました:明らかに影響を与えなかった

db.parent.find(child.parentId).Child.Add(child); 

子オブジェクトの親はnullで、親の子リストは空です。

子供を親のコレクションに入れるにはどうすればよいですか?

ありがとうございました!

+1

あなたは)(context.SaveChangesを呼び出したのですか? – amyn

+1

'Child'プロパティを' public virtual ICollection Child {get;}に変更する必要があります。セット; } ' –

+0

こんにちは! 興味がありがとう、私は実際にSaveChanges()を呼び出します。 仮想を追加しても問題は解決しませんでした。結果をシリアライズするためにプロキシ作成をオフにしたことを付け加えておきます。 編集していただきありがとうございます。 –

答えて

1

私が知る限り、プロキシの作成を無効にすると、遅延読み込みにも影響します。レイジーローディングは、プロキシクラス内でのみ機能します。そうでなければ、EFはプロパティにアクセスしているときに制御する方法を持っていません。

あなたはチャイルズを得ることができる唯一の方法は、(インクルードを使用して())積極的なロードを使用することです

+0

こんにちは、答えをありがとう! 私は子供を含めようとしましたが、問題は同じです。 私は問題は、子供がそれを取得する以上の親に設定されていないということです。 –

+1

プロキシ作成なしでは、遅延読み込み機能はありません。これは、myParent.Child(およびmyChild.Parent)がEFによって決して満たされないことを意味します。 DBコールで明示的に追加する必要があります。たとえば、db.Parent.Include(m => m.Child).SingleOrDefault(m => m.Id == myId) – jparaya

関連する問題