Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入多个记录时实体框架外键问题?_C#_.net_Entity Framework_Exception_Entity Framework 4 - Fatal编程技术网

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的生成,因为外键到那时一切都应该好吗