代码之家  ›  专栏  ›  技术社区  ›  James Orr

默认为非空列的Linq to SQL字符串属性

  •  1
  • James Orr  · 技术社区  · 16 年前

    我有一个基于简单表的linq-to-sql类“voucherrecord”。一个属性“note”是表示nvarchar(255)列的字符串,该列不可为空,默认值为空字符串(“”)。

    如果我实例化一个voucherrecord,note属性的初始值为空。如果我使用DataContext的InsertonSubmit方法添加它,我会得到一条SQL错误消息:

    无法插入值 NULL 进入列 'Note' ,表 'foo.bar.tblVoucher' ;列不允许空值。 INSERT 失败。

    为什么数据库不默认启动?什么样的查询可以绕过默认值?如何查看为此操作生成的SQL?

    谢谢你的帮助!

    1 回复  |  直到 12 年前
        1
  •  2
  •   Nick Craver    16 年前

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

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

    例如,图片中有一列默认为除 NULL 但是你特别想要 无效的 …为了让它一直工作,您指定的任何值都必须覆盖默认值,即使在 无效的 .

    你需要设置 自动同步 OnInsert , 自动生成值 true 可以为空 false 让你的专栏发挥作用。 See here for a full run-down 在LINQ方面有解释。

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