插入多个记录时实体框架外键问题

本文关键字:框架 问题 实体 记录 插入 | 更新日期: 2023-09-27 18:17:45

我们遇到了一个问题,当我们提交一个要添加到数据库的几个对象的列表时,我们得到与外键相关的错误…

using (context ctx = new context()
{
    foreach(foo f in bars)
    {
         ctx.AddToFoo(f);
    }
    ctx.SaveChanges();
}

错误说插入语句与外键约束冲突,但如果我将SaveChanges()移动到foreach循环中,它工作得很好,但似乎它会慢得多…

我将把它卷进BulkCopy类,但我们有一堆日志代码绑定到SaveChanges

编辑:这里有一个异常的图片链接link

插入多个记录时实体框架外键问题

看起来SaveChanges没有按照AddToFoo中添加的顺序保存每个foo

我不知道为什么它会在for循环中工作。如果循环外有一个异常,那么它也应该在循环内给出一个异常。

您应该排除异常中列出的外键约束。因此,如果约束是"FK_Foo_Parent",那么你需要首先有一个父项,该父项被Foo项引用。

你的代码应该是这样的:

                using (context ctx = new context())
                {
                    ctx.AddToParents(parent);
                    foreach (foo f in bars)
                    {
                        parent.Foos.Add(f);
                        ctx.AddToFoos(f);
                    }
                    ctx.SaveChanges();
                }

这将在新的foo记录和它的父记录之间设置外键引用。