2011-12-19 72 views
1

插入到SQL Server时,我有一大束插入我的DataContext通过在交易做的。 我将两种类型的对象:A和B错误通过System.Data.Linq.DataContext

我做执行许多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.

有时候,我得到这样的错误: 违反FOREIGN KEY约束“FK_B_A”对表“A”。列“GUID”。

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

它看起来像在插入到B插入到A

+0

你的错误是赠送什么是错的..在你的代码,你做任何承诺..或者你在做类似散装插入,然后提交..记得误差不会很明显,直到提交调用..我会建议做单插入和承诺找出你想要插入什么重复的密钥..你是否使用C#方法来生成和返回新的GIUD的那些通常是唯一的键,所以如果你是硬编码,并试图插入相同的密钥...以及将生成外键约束。 – MethodMan 2011-12-19 17:00:35

+0

你知道SQL插入你有没有不正确的权利? INSERT INTO(列名)VALUES(实际值)''。您从中创建查询字符串的代码示例可能有助于找到此问题。 – 2011-12-19 17:09:38

+0

对不起,我只是写错样品。有时所有记录都成功插入数据库。 – gabba 2011-12-19 17:09:43

回答

1

谢谢大家的帮助。

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

+0

很高兴你解决它!那么你可以关闭这个问题吗? – ivowiblo 2011-12-23 16:24:13

4

顺序可能以某种方式交换之前,有时会发生。

我建议你首先做所有insertstable A,然后才做insertstable B


另外,看起来您发布的插入内容不正确。

例子可见here

+0

看起来你是对的。我会尝试以这种方式插入。 – gabba 2011-12-19 17:15:45

+0

当我重写程序并在全部插入到表B之前完成对表A的所有插入操作。该错误总是会重现。 – gabba 2011-12-20 08:57:49

+0

但是,如果我尝试插入少量记录(10-20)记录一切正常。 – gabba 2011-12-20 10:16:49