我正在客户端创建一个带有新Child实体的新Parent实体。这是一对多的关系。
//Client has created a new Parent with a new Child attached
//e.g. Parent.Child = new Child();
//This is submitted to the server, and ends up here:
public void InsertParent(Parent parent)
{
ObjectContext.Parents.AddObject(parent); //No Parent.ID yet
ObjectContext.SaveChanges(); //Now I have a Parent.ID
//Do some stuff with the Parent.ID here. (Nothing is changed with the Parent or Child, just using Parent.ID)
}
我的问题是,在所有这些之后,我最终在数据库中使用两个子实体。我的猜测是EF已经为排队的子进行插入,当我调用SaveChanges时,它会为同一个子实体创建另一个插入。
我在这里有SaveChanges的原因是我希望在创建父项后使用Parent.ID做一些事情,但是我需要在它获得ID之前保留Parent(主键由DB创建)。当我把所有额外的代码都拿出来时(从SaveChanges开始),一切都按预期工作。
答案 0 :(得分:1)
我意识到这篇文章已经很老了,但是我遇到了同样的问题,并没有找到一个很好的方法。我正在使用WPF和Binding。我正在尝试插入一个与多个子表绑定的历史记录。我最后做的是确保没有插入孩子:
Parent.ChildID = Parent.Child.ChildID;
Parent.Child = null;
这似乎完全是黑客,但它确实有效。
答案 1 :(得分:0)
除非您进行更多调试并确定问题的确切位置,否则很难说出这里发生了什么。
您的操作应该接受Parent with Child,只需实例化上下文并插入即可。如果你能确认它只是这样做,那么你很可能会发现你的问题。