插入多条记录时实体框架的外键问题?

时间:2011-12-14 14:17:33

标签: c# .net entity-framework entity-framework-4 exception-handling

我们遇到的问题是,当我们提交要添加到数据库的多个对象的列表时,我们会收到与外键相关的错误...

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

错误说insert语句与foriegn键约束冲突,但如果我在foreach循环中移动SaveChanges()它工作正常,但似乎它会慢得多......

我会将其转换为BulkCopy类,但我们有一堆与SaveChanges绑定的日志记录代码。

编辑: 这是指向例外Linky

的图片的链接

2 个答案:

答案 0 :(得分:0)

SaveChanges似乎没有按照AddToFoo中添加的foo的相同顺序保存每个foo。

答案 1 :(得分:0)

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

您应该解决异常中列出的外键约束。因此,如果约束是“FK_Foo_Parent”,那么您需要首先具有Foo项引用的Parent项。

您的代码应如下所示:

                using (context ctx = new context())
                {
                    ctx.AddToParents(parent);

                    foreach (foo f in bars)
                    {
                        parent.Foos.Add(f);
                        ctx.AddToFoos(f);
                    }
                    ctx.SaveChanges();
                }

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