插入多个记录时实体框架外键问题
本文关键字:框架 问题 实体 记录 插入 | 更新日期: 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记录和它的父记录之间设置外键引用。