Linq to sql 默认为非空列的linq到sql字符串属性

Linq to sql 默认为非空列的linq到sql字符串属性,linq-to-sql,Linq To Sql,我有一个基于简单表的LINQ到SQL类“VoucherRecord”。一个属性“Note”是表示nvarchar(255)列的字符串,该列不可为null,默认值为空字符串(“”) 如果实例化VoucherRecord,则Note属性的初始值为null。如果我使用DataContext的InsertOnSubmit方法添加它,我会收到一条SQL错误消息: 无法将值NULL插入表'foo.bar.tblVoucher'的列'Note';列不允许空值插入失败 为什么数据库默认值没有生效?什么样的查询可

我有一个基于简单表的LINQ到SQL类“VoucherRecord”。一个属性“Note”是表示nvarchar(255)列的字符串,该列不可为null,默认值为空字符串(“”)

如果实例化VoucherRecord,则Note属性的初始值为null。如果我使用DataContext的InsertOnSubmit方法添加它,我会收到一条SQL错误消息:

无法将值
NULL
插入表
'foo.bar.tblVoucher'
的列
'Note'
;列不允许空值<代码>插入失败

为什么数据库默认值没有生效?什么样的查询可以绕过默认查询?如何查看为此操作生成的sql


谢谢你的帮助

如果您忽略该列,则该值将成为数据库默认值,但会使用您插入的任何内容而不是默认值,例如:

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
,列才能工作。在Linq方面有解释


对于查看生成的SQL,

我明白您的意思。但如果我将Note列设置为AutoGenerated=true,则无法设置其值,这很糟糕。我收到错误“类型为“VoucherRecord”的对象的成员“Note”的值已更改。无法更改由数据库计算或生成的成员。”如果我仅将AutoSync设置为Insert,而未将AutoGenerated设置为True,则返回原始错误消息。嗯@Barry-在Linq模型中是否将Nullable设置为false?是的,Nullable设置为false。@Barry-尝试将此分部与同一类一起使用:
公共分部类VoucherRecord{partial void onCreate(){Note=Note??string.Empty;}
将自动生成的设置保留为false