简而言之,为什么会失败(未myChildObject
添加到数据库中)。请注意,它适用于 ObjectContext:
using (var db = new dbEntities())
{
var myParentObject = db.parentObjects.First(); // this definitely exists in the db
// this **should** attach myChildObject to the context,
// and therefore add it to the db on .SaveChanges() - it doesn't!
var myChildObject = new childObject(){
parentObject = myParentObject
};
db.SaveChanges();
}
您可以通过将新实体连接到另一个已被跟踪的实体来将新实体添加到上下文中。这可以通过将新实体添加到另一个实体的集合导航属性或通过将另一个实体的引用导航属性设置为指向新实体来实现。
当然,上面的代码应该可以工作,因为myChildObject
引用myParentObject
是一个被跟踪的对象。EF 应该足够聪明,可以确定它需要添加到childObjects
集合中。当我使用 ObjectContext 时它工作得很好,现在我发现我需要重写我的所有代码才能让它与 dbContext 一起工作。
为了让它工作,我必须像这样重写它:
using (var db = new dbEntities())
{
var myParentObject = db.parentObjects.First(); // this definitely exists in the db
var myChildObject = new childObject();
myParentObject.childObjects.Add(myChildObject);
db.SaveChanges();
}