2013-06-28 18 views
3

我有一個SQL Server表結構,其中某些列是引用不同查找表的外鍵。這些列創建爲NOT NULLDEFAULT value = 1,因爲ID = 1的查找值是我希望在保存記錄時傳遞NULL時要分配的默認值。嘗試刪除(*)和(*)之間的關係。但是,其中一個關係的外鍵(X)不能設置爲空

但是,我在嘗試Add/Update/Delete此子表的記錄時遇到了以下錯誤。

An attempt was made to remove a relationship between a (*) and a (*). However, one of the relationship's foreign keys (X) cannot be set to null. 

我試圖搜索很多,但我有解決方案來手動更改LINQ to SQL代碼或XML來解決此問題。我不能那樣做,因爲將來當表格變化時,我必須確保每次都應用手動更改。

另外,我無法將列更改爲接受NULL,因爲這會影響其他應用程序通過LINQ To SQL使用同一個表。

我需要更易於管理的解決方案。

回答

1

我假設你試圖通過分配null來重置參考到默認值,期望L2S採用數據庫默認值。但是,對於L2S,您只是取消了一個外鍵。它不知道數據庫中有任何默認值。

因此,您必須通過將它自己設置爲默認查找對象來更改引用。你可以通過在你的類中添加Reset()方法來實現,所以你不必將這些代碼分散到所有的地方。

1

我通過從Code it self中爲Table類屬性分配默認值來解決這個問題。我理解的是這個。 LINQ to SQL沒有考慮從數據庫中設置的默認值。此外,該列不是NULL。因此,將INT分配的默認值作爲0賦予這些屬性。現在,我的數據庫中沒有任何ID = 0的主條目。另外,由於DB沒有爲該列獲取NULL值,因此它根本不會嘗試應用Default值。

所以我做的是,在保存記錄之前,如果我發現如果綁定到這個屬性的控件有一個NULL值(沒有被選擇/控制是不可見的等),我將Default自行編碼。這消除了回到數據庫以分配默認值的需要。

現在,一切工作正常。想到分享這個,因爲我無法從任何地方得到任何令人滿意的答案。

相關問題