次の例を考えます。
public class Parent
{
public Guid ID {get;set;}
public string Name {get;set;}
public Child Child {get;set;}
}
public class Child
{
public Guid ID {get;set;}
public string Name {get;set;}
}
子インスタンスが割り当てられた状態で、親オブジェクト インスタンスを保存したいと考えています。ここでの事実は次のとおりです: 指定された子オブジェクトは既にデータベースに存在します。
Parent p = new Parent();
p.ID = Guid.NewGuid();
// Get the Child Object
Child c = GetTheChild(...);
p.Child = c;
SaveParent ( p );
関数 Save Parent では、次のコードが実装されています。
public void SaveParent ( Parent p )
{
using (MyContext context = new ClinicContext())
{
context.Parents.Add( P );
context.SaveChanges();
}
}
ここで問題が発生します。この例の子はデータベースに既に存在しますが、コンテキスト DBSet に親を追加すると、指定されたエンティティ c も「追加済み」のエントリ状態を保持します。DBContext は、重複したキーを持つ別の子レコードを保存しようとしています!
これを解決する方法を知っている人はいますか?Entity Frameworkがデータベースに既に存在するレコードを検出できる場合、挿入を更新に変える方法があるかどうかを考えています。
ご協力いただきありがとうございます。