C# 通过System.Data.Linq.DataContext插入SQL Server时出错
我在事务中通过DataContext进行了大量插入。 I插入两种类型的对象:A和B 我确实执行了许多sql插入,如: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',...)
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次提交
。