2011-11-10 16 views
1

親と子の両方を自分のサービス層に更新するように送信しています。親を更新するときのエンティティフレームワークの更新子

次のようにモデルが設定されています

public class Parent 
{ 
    public int ParentId { get; set; } 
    public ICollection<Child> Children; 
} 

public class Child 
{ 
    public int ChildID {get; set;} 
    public virtual Parent Parent{get;set} 
    public virtual int ParentId{get; set;} 
    public string FirstName { get; set; } 
} 

私が好きな振る舞いは子どもが付属見つからないデータベースであるかのように、子供たちは常に、親に接続されていることで、それを削除する必要があります。存在しない場合は作成してください。存在する場合は更新してください。

これらの呼び出しをすべて手動で行うコードを記述しないでこれを行うにはどうすればよいですか?すべてを削除する場合と同様に、すべてを再追加します。

答えて

2

すべての子を削除して再追加する必要はありません(たとえば、更新する子のうちの1つを参照する他のエンティティがデータベース内にある場合は問題があります)。それを再追加すると、外部キー制約違反につながる)。あなたが実際に行うに必要なもの

はより複雑である:(

あなたは、データベースに元のオブジェクトグラフをロードし、それが新しい場合、またはそれがすでに存在する場合、それは、削除された場合、子で子をチェックしなければなりません。

モデルに非常に正確にフィットする例はここにある:

The relationship could not be changed because one or more of the foreign-key properties is non-nullable

Entity Frameworkのは、デタッチOBJECで、データベース内のオブジェクトグラフを更新するために、あなたをサポートしていません。 tグラフ。それが提供する唯一のサポートは、スカラと複雑なプロパティの更新です。それらの場合はApplyCurrentChangesObjectContextの場合)またはEntry(entity).CurrentValues.SetValuesDbContextの場合)を使用できます。後者は、リンクされた例で、親子と各子のスカラープロパティを更新するために使用されます。しかし、エンティティ間の関係を更新することは手作業です。

関連する問題