我非常需要幫助。我花了一整天的時間,甚至沒有一個小時浪費在一個項目上。我有一個LINQ to SQL的數據層,並使用下面的代碼在做一個簡單的插入到數據庫:當NOT NULL時Linq to SQL「無法插入值NULL」!
using (var odc = new OrdersDataContext())
{
try
{
var id = GetNextOrderId(odc);
order.ID = id;
odc.tblOrders.InsertOnSubmit(order);
odc.SubmitChanges();
}
catch (Exception ex)
{
Logger.LogException(ex);
}
}
由於其他遺留代碼,這是這是在SQL 2000上運行的數據庫,我不能讓數據庫變更,但是這段代碼在一點上工作正常,然後停止工作。它是這樣說的:
無法將值NULL插入'ID'列'表'Order';列不允許有空值。 INSERT失敗。
但是,正如您從代碼中所看到的以及在代碼中可以清楚地看到的那樣,ID列獲取有效的ID號。 由於某些原因,即使我設置了ID字段,它仍試圖將其作爲null插入,即使此代碼在之前工作正常。我甚至完全恢復數據庫並重建數據層,但無濟於事。
我很難過這個和時間,我在我身邊。
絕對沒有機會GetNextOrderId(odc)可以在不拋出異常的情況下返回null? – jpm
您是否嘗試運行分析器來查看正在生成併發送到數據庫的SQL? – kprobst
jpm ...我看到ID一直正確設置,直到它進入InsertOnSubmit方法,但它一直試圖提交一個空值。我的假設我出於某種原因,沒有任何價值觀正在設定,整個對象經過爲空,但我不明白爲什麼。在這一點上,我必須開始假設這是由於在某處使用了緩存版本的代碼。其他沒有任何意義。 – webwires