C# 通过System.Data.Linq.DataContext插入SQL Server时出错

C# 通过System.Data.Linq.DataContext插入SQL Server时出错,c#,.net,sql-server,linq-to-sql,datacontext,C#,.net,Sql Server,Linq To Sql,Datacontext,我在事务中通过DataContext进行了大量插入。 I插入两种类型的对象:A和B 我确实执行了许多sql插入,如: INSERT INTO A (...) VALUES ('11111111-1111-1111-1111-111111111111',..) INSERT INTO B (...) VALUES ( '21111111-1111-1111-1111-111111111111', '11111111-1111-1111-1111-111111111111',...)

我在事务中通过DataContext进行了大量插入。 I插入两种类型的对象:A和B

我确实执行了许多sql插入,如:

INSERT INTO A (...) VALUES ('11111111-1111-1111-1111-111111111111',..)
INSERT INTO B (...) VALUES (
   '21111111-1111-1111-1111-111111111111', 
   '11111111-1111-1111-1111-111111111111',...) 
分别在

db.ExecuteCommand(sql.ToString(), processedParams.ToArray());
表B具有A的外键

有时我会遇到如下错误: 违反表“A”上的外键约束“FK_B_A”。“GUID”列

有时,所有记录都成功地插入数据库。除了动态生成的guid之外,数据束总是相同的


看起来B的插入有时发生在A的插入之前。

顺序可能会以某种方式交换

我建议您首先执行
表A中的所有
插入操作
,然后再执行
表B中的
插入操作


此外,您发布的插入内容似乎不正确


有关示例,请参见。

可能会以某种方式交换顺序

我建议您首先执行
表A中的所有
插入操作
,然后再执行
表B中的
插入操作


此外,您发布的插入内容似乎不正确


有关示例,请参阅。

谢谢大家的帮助


这是我的服务中事务清理过程中的错误的副作用。它回滚任何长事务。在插入到表A和表B之间进行清理时,将引发错误,因为A中的记录已不存在。

谢谢大家的帮助



这是我的服务中事务清理过程中的错误的副作用。它回滚任何长事务。在插入到表A和表B之间进行清理时,可能会抛出错误,因为A中的记录已不存在。

您的错误会泄露错误。。在您的代码中,您正在执行任何提交。。还是像批量插入然后提交。。在执行via事务时,请记住,在commit调用之前,错误不会明显。。我建议进行单次插入和提交,以确定您试图插入的重复密钥。。您是否使用C#方法生成并返回新的GIUD,这些通常是唯一的密钥,因此如果您正在硬编码并尝试插入相同的密钥。。。这将生成一个外键约束..你知道上面的SQL插入是不正确的,对吗<代码>插入(列名)值(实际值)
。从中生成查询字符串的代码示例可能有助于定位此问题。很抱歉,我在编写示例时弄错了。有时,所有记录都会成功地插入数据库。记录的键会自动且始终生成权限。问题不在于重复的guid。有时我违反了foregin键。这个错误正好在db.ExecuteCommand时抛出。我很惊讶,因为它进入了交易。你的错误是泄露了错误。。在您的代码中,您正在执行任何提交。。还是像批量插入然后提交。。在执行via事务时,请记住,在commit调用之前,错误不会明显。。我建议进行单次插入和提交,以确定您试图插入的重复密钥。。您是否使用C#方法生成并返回新的GIUD,这些通常是唯一的密钥,因此如果您正在硬编码并尝试插入相同的密钥。。。这将生成一个外键约束..你知道上面的SQL插入是不正确的,对吗<代码>插入(列名)值(实际值)
。从中生成查询字符串的代码示例可能有助于定位此问题。很抱歉,我在编写示例时弄错了。有时,所有记录都会成功地插入数据库。记录的键会自动且始终生成权限。问题不在于重复的guid。有时我违反了foregin键。这个错误正好在db.ExecuteCommand时抛出。我同意,因为它进入了事务。当我重写程序并在表B中插入之前插入表A中的所有内容时,错误总是重复出现。但如果我尝试插入少量记录(10-20条),所有记录都可以。这有点奇怪。在对表B进行插入之前,是否提交表A上的插入?否。我只需要在所有插入之后提交事务。如果出现问题,请回滚。这将导致相同的问题。执行的顺序可能不是你想象的那样。当我重写程序并在表A中插入所有内容,然后再将所有内容插入表B中时,您确实需要进行2次
提交
。错误总是重复出现。但如果我尝试插入少量记录(10-20条),则所有记录都可以。这有点奇怪。在对表B进行插入之前,是否提交表A上的插入?否。我只需要在所有插入之后提交事务。如果出现问题,请回滚。这将导致相同的问题。执行的顺序可能不是你想象的那样。您确实需要进行2次
提交