Linq-to-SQL忽略SQL Server默认值

jao*_*jao 22 sql-server-2005 linq-to-sql

使用Linq-to-SQL,向现有表添加列,并在该新列上设置默认值时,Linq to SQL似乎忽略了默认值.有没有其他人经历过这种行为?有没有办法解决它,以便Linq-to-SQL或SQL Server自动设置默认值?

我添加的列是Bit类型,默认值设置为1.

jao*_*jao 11

我现在通过使用此博客中的示例明确地解决了这个问题.

partial void OnCreated() {
    if (this.DateTimeCreated == null) {
           this.DateTimeCreated = DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要将它传递给部分datacontext类,因为每次更改dbml中的内容时都会自动覆盖默认值.

  • 这对我来说效果最好,因为当我修改一个表并在linq-to-sql dbml文件上重新生成它时,我丢失了我在表中的字段上设置的所有自定义属性,导致我的网站中出现模糊的错误.在单独的类文件中创建部分OnCreated方法可以避免这种情况. (3认同)

ira*_*hil 11

将Auto Generated属性设置为True.

在此输入图像描述

  • 这不起作用.如果您总是希望使用默认值,它将起作用,但在插入对象时不允许您使用非默认值.Linq2Sql将忽略您提供的值并读回默认值. (2认同)

Nic*_*s H 7

进入设计器并选择"OnInsert"的"Auto-Sync"值.这将在将记录插入数据库时​​同步该值.

  • 这不起作用.插入对象时不会忽略该值.如果这样做,它将尝试插入`null`作为列值,当正确的操作是不在查询中列出任何值时.因此,当列不可为空时,您将获得"无法将null插入非可空列"错误. (2认同)