gpt4 book ai didi

entity-framework - 首先使用实体​​框架代码创建父记录时,在子表中插入记录

转载 作者:行者123 更新时间:2023-12-04 09:28:00 25 4
gpt4 key购买 nike

我已经在数据库中插入了一些父记录。现在,我想添加一些子记录。为此,我遵循以下步骤:

  • 检索父项(A)记录
  • 创建一个新的 child (B)记录
  • 将父记录添加到Child的Navigation属性。 B.A = A
  • 调用SaveChanges。

  • 问题是当我执行此操作时,EF将插入新的父项,然后使用带有指向新的新插入的父项的外键添加子项,而不是仅插入具有映射到现有父项的子项。保存子级时,我还检查了父级的主键,它确实存在于数据库中。

    请注意,我正在使用数据库为 parent 和 child 生成的身份。
    我注意到的一件事是,如果我从同一上下文对象添加/保存父项和子项,则它可以正常工作。

    需要尽快修复此问题。任何帮助将不胜感激。

    最佳答案

    是的,您必须对该操作使用相同的上下文。这就是我想说的。如果不使用相同的上下文,则必须手动控制要插入的对象,更新的对象和不会修改的对象。在您的方案中,顺序可以是:

    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();

    另一种方法可以是:
    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();

    关于entity-framework - 首先使用实体​​框架代码创建父记录时,在子表中插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913771/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com