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

时间:2010-11-13 11:35:44

标签: 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);

我正在

  

无法将值NULL插入列'main_email_support',表'SQL2008R2.dbo.ContentContacts';列不允许空值。 INSERT失败。声明已经终止。

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

alt text

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

  

“哦,它是null值,所以让我们添加列默认值”

1 个答案:

答案 0 :(得分:6)

我做了一个小测试,创建了一个包含默认值但不允许空值的列的表。

然后这个SQL语句:

INSERT INTO [Test].[dbo].[Table_1]
       ([TestText])
 VALUES
       (null)

给出了这个错误:

  

Msg 515,Level 16,State 2,Line 1
  无法将值NULL插入列'TestText',表中   'Test.dbo.Table_1';列不允许空值。 INSERT失败。

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

您有两个选择:

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

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