C# 插入多个记录时实体框架外键问题?
我们遇到了一个问题,当我们提交要添加到数据库中的几个对象的列表时,会出现与外键相关的错误C# 插入多个记录时实体框架外键问题?,c#,.net,entity-framework,exception,entity-framework-4,C#,.net,Entity Framework,Exception,Entity Framework 4,我们遇到了一个问题,当我们提交要添加到数据库中的几个对象的列表时,会出现与外键相关的错误 using (context ctx = new context() { foreach(foo f in bars) { ctx.AddToFoo(f); } ctx.SaveChanges(); } 错误表明insert语句与外键约束冲突,但如果我将SaveChanges()移动到foreach循环中,它工作正常,但似乎会慢得多 我会把它放到BulkC
using (context ctx = new context()
{
foreach(foo f in bars)
{
ctx.AddToFoo(f);
}
ctx.SaveChanges();
}
错误表明insert语句与外键约束冲突,但如果我将SaveChanges()
移动到foreach
循环中,它工作正常,但似乎会慢得多
我会把它放到BulkCopy
类中,但是我们有一堆与SaveChanges
相关的日志代码
编辑:
这里有一个链接,指向异常的图片它看起来像是
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记录和其父记录之间设置外键引用。是否要共享错误?也可能值得启动SQL Profiler或EFProf来查看实际发出的SQL,这样你就可以看到它是否试图以错误的顺序执行任何操作。我只有一份打印件,所以我试图上传异常的图片…好吧,这是怎么回事?Foo有外键吗?什么是完整的异常消息?我这样问是因为外键约束的名称通常被引用(例如约束“FK_教师_类”)是的,它上面有外键,请参见上面的图片了解完整的例外每个foo都与其他外键无关,所以不应该是这样。我想这可能与调用SaveChanges之前添加太多对象有关,但我想我必须看看SQL的生成,因为外键到那时一切都应该好吗