3

我们正在运行到哪里,当我们提交的几个对象的列表被添加到我们得到有关外键的错误数据库中的问题...实体框架插入多个记录时的外键问题?

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

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

我会卷到BulkCopy类,但我们有一堆日志代码绑定到SaveChanges。

编辑: 这里是例外Linky

+3

小心分享错误?另外值得启动SQL Profiler或EFProf来查看正在发布的实际SQL,以便了解它是否尝试按错误顺序执行任何操作。 – 2011-12-14 14:20:55

+0

我只有一个打印出来,所以我试图得到一个上传的例外图片... – Chuck 2011-12-14 15:01:05

+0

好的这[链接到图片](http://www.flickr.com/photos/[email protected]/ 6510885421 /) – Chuck 2011-12-14 15:09:43

回答

0

它看起来像SaveChanges每富不保存在相同的顺序,他们在AddToFoo添加的图片的链接。

0

我不知道它为什么会在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(); 
       } 

,将设置新富记录与其父记录之间的外键引用。