如何在EF下插入DB默认值?

bal*_*dre 7 entity-framework

添加这样的新记录时

ContentContacts c2 = new ContentContacts();

c2.updated_user = c2.created_user = loggedUserId;
c2.created_date = c2.updated_date = DateTime.UtcNow;

db.ContentContacts.AddObject(c2);
Run Code Online (Sandbox Code Playgroud)

我越来越

无法将值NULL插入列'main_email_support',表'SQL2008R2.dbo.ContentContacts'; 列不允许空值.INSERT失败.该语句已终止.

但是数据库中的默认值是一个空字符串,如:

替代文字

为什么我会收到这样的错误?EF不应该说:

"哦,这是一个null值,所以让我们添加列默认值"

Shi*_*iji 6

我做了一个小测试,创建了一个具有默认值但不允许空值的列的表.

那么这个SQL语句:

INSERT INTO [Test].[dbo].[Table_1]
       ([TestText])
 VALUES
       (null)
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

消息515,级别16,状态2,行1
无法将值NULL插入列'TestText',表'Test.dbo.Table_1'; 列不允许空值.INSERT失败.

这里的问题是insert指定所有列,也指定具有默认值的列.Insert尝试使用空值更新列.

你有2个选择:

  • 通过视图更新表,该视图不包含默认列
  • 在C#代码中设置默认值

默认值是业务逻辑,因此可以在应用程序的业务层中设置它.