首先使用Entity Framework代码存在父记录时,在子表中插入记录

Ami*_*mit 7 entity-framework parent-child ef-code-first entity-framework-4.1

我已经在数据库中插入了一些父记录.现在我想添加一些子记录.为此,我按照以下步骤操作:

  1. 检索父(A)记录
  2. 创建一个新的子(B)记录
  3. 将父记录添加到Child的Navigation属性.BA = A.
  4. 致电SaveChanges.

问题是,当我这样做时,EF插入一个New Parent,然后添加一个外键指向新新插入的父项,而不是只插入映射到已存在父项的子项.我还在保存子项时检查了父项的主键,它确实存在于数据库中.

请注意,我正在为父和子使用数据库生成的标识.我注意到的一件事是,如果我从同一个上下文对象添加/保存父和子,那么它工作正常.

需要尽快解决这个问题.任何帮助将不胜感激.

Lad*_*nka 22

是的,您必须为该操作使用相同的上下文.这就是重点.如果不使用相同的上下文,则必须手动控制将插入哪个对象,哪些对象已更新,哪些对象不会被修改.在您的方案中,序列可以是:

context.Parents.Attach(parent); // just attach as unchanged
context.Childs.Add(child); // add as inserted
parent.Childs.Add(child); // make connection between existing and inserted object
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

另一种方法可以是:

child.Parent = parent;
context.Childs.Add(child); // both child and parent are marked as inserted!!!
context.Entry(parent).State = EntityState.Unchanged; // set parent as unchanged
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

  • 今天救了我的死线tnx +1 (2认同)