2010-03-13 68 views
1

我有一個LINQ to SQL類「VoucherRecord」基於一個簡單的表。一個屬性「Note」是一個字符串,表示一個nvarchar(255)列,該列不可空,並且具有空字符串('')的默認值。LINQ to SQL字符串屬性從非空列與默認

如果我實例化一個VoucherRecord,Note屬性的初始值爲null。如果我使用一個DataContext的InsertOnSubmit方法添加它,我得到一個SQL的錯誤信息:

無法將值NULL插入'Note'列,表'foo.bar.tblVoucher';列不允許有空值。 INSERT失敗。

爲什麼數據庫默認不踢?無論如何,什麼樣的查詢可以繞過默認值?我如何查看爲此操作生成的sql?

感謝您的幫助!

回答

2

如果省略列,該值將成爲數據庫的默認,但任何插入使用默認值,例如,代替:

INSERT INTO MyTable (ID, VoucherRecord) Values(34, NULL) -- Null is used 
INSERT INTO MyTable (ID) Values(34) -- Default is used 

圖片比如你有一個默認爲任何一列但NULL,但你特別想要NULL ...爲了永遠的工作,無論你指定的任何值必須覆蓋默認,即使在NULL的情況下。

您需要自動同步設置爲OnInsert自動生成的值true可空false爲你列的工作。 See here for a full run-down在Linq方面有解釋。

查看生成的SQL,I have to recommend LinqPad

+0

我明白你的意思了。但是如果我將Note列設置爲AutoGenerated = true,則無法設置其值,這很糟糕。我得到了'VoucherRecord'類型的對象的成員'Note'的值改變了的錯誤,由數據庫計算或生成的成員不能被改變。「 – 2010-03-13 17:59:19

+0

如果我只將AutoSync設置爲Insert *而不將AutoGenerated設置爲True,則返回原始錯誤消息。哼! – 2010-03-13 18:02:20

+0

@Barry - 你的Linq模型中有Nullable設置爲** false **嗎? – 2010-03-13 18:10:23