2012-07-26 42 views
1

我正在使用Linq插入,刪除和更新我的代碼中的數據庫。 使用InsertOnSubmit插入數據時,我得到cannot add an entity that already exists異常。 請看看我的代碼C#Linq to SQL:無法添加已存在的實體

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo) 
{ 
    PRICE_SETTING priceSetting = new PRICE_SETTING(); 
    priceSetting = priceSettingsInfo;   
    DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSettingsInfo);   
    DataContext.CommonUsers.SubmitChanges(); 
} 

回答

2

只需設置新的priceSetting的屬性。

private static void AddNewPriceSettings(PRICE_SETTING priceSettingsInfo) 
{ 
    PRICE_SETTING priceSetting = new PRICE_SETTING(); 
    // 
    priceSetting.Prop1 = priceSettingsInfo.Prop1; 
    priceSetting.Prop2 = priceSettingsInfo.Prop2; 
    priceSetting.Prop3 = priceSettingsInfo.Prop3; 
    // ... 
    DataContext.CommonUsers.PRICE_SETTINGs.InsertOnSubmit(priceSetting);   
    DataContext.CommonUsers.SubmitChanges(); 
} 
+0

仍然收到相同的錯誤: - ( – Kathiravan 2012-07-26 13:03:31

+0

順便說一句,你應該使用InsertOnSubmit(priceSetting);而不是InsertOnSubmit(priceSettingsInfo); – 2012-07-26 13:08:15

+0

是的,非常感謝你在包括主鍵值後正在工作 – Kathiravan 2012-07-26 13:23:58

0

如果使用現有的PRICE_SETTING對象調用AddNewPriceSettings(),你確實想重新添加。你方法的第二行就是這樣。您在第一行創建的new PRICE_SETTING();然後不會再被引用,並且將被GC'ed而不嘗試插入它。

如果你想創建一個副本,你必須在插入和提交它之前將priceSettingsInfo克隆到priceSetting變量(你可以使用各種技術)。

+0

你能告訴我關於克隆嗎? – Kathiravan 2012-07-26 13:07:13

+0

@ user1063573能否請您付出一些努力?最簡單的方法可能是創建一個[複製構造函數](http://msdn.microsoft.com/en-us/library/ms173116(v = vs.100).aspx)。 – CodeCaster 2012-07-26 13:14:00

0
cannot add an entity that already exists 

該錯誤信息清楚地表明瞭該問題。您的數據庫中已經有一行包含與您嘗試插入的實體相同的實體。

SQL如何決定兩個項目是否「相同」?它使用一個鍵列,通常是一個整數ID。

因此,這讓我問你 - 列定義如何查找受影響的表?你在哪裏得到傳入該方法的PRICE_SETTING

這個問題也可能是因爲您試圖對已經存在的對象執行更新 - 在這種情況下,您需要使用不同的方法。請分享有關上下文的更多信息。

+0

我已經刪除了以前的數據,並且在刪除舊數據後填充了新的PRICE_SETTING數據。 – Kathiravan 2012-07-26 12:50:49

+0

而不是更新數據。我刪除了舊數據並嘗試插入新數據。 – Kathiravan 2012-07-26 13:06:02