我有一个基于简单表的LINQ to SQL类“VoucherRecord”。一个属性“Note”是一个表示nvarchar(255)列的字符串,该列是不可为空的,其默认值为空字符串('')。
如果我实例化VoucherRecord,则Note属性的初始值为null。如果我使用DataContext的InsertOnSubmit方法添加它,我会收到一条SQL错误消息:
无法将值
NULL
插入列'Note'
,表'foo.bar.tblVoucher'
;列不允许空值。INSERT
失败。
为什么数据库默认无法启动?什么样的查询可以绕过默认值?如何查看生成的sql以执行此操作?
感谢您的帮助!
答案 0 :(得分: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
,将 Nullable 设置为false
让您的专栏发挥作用。 See here for a full run-down在Linq方面做了解释。
查看生成的SQL I have to recommend LinqPad