2011-12-19 73 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