给定以下示例:
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();
}
}
现在问题来了:由于本例中的child已经存在于数据库中,但是当在上下文DBSet中添加parent时,给定的实体c也持有“Added”的入口状态,你猜怎么着?DBContext 尝试使用重复的 Key 保存另一个子记录!
任何机构都知道如何解决这个问题?如果实体框架可以检测到数据库中已经存在的记录,我正在考虑是否有办法将插入转换为更新。
谢谢你的帮助。