代码之家  ›  专栏  ›  技术社区  ›  balexandre

如何在ef下插入db默认值?

  •  7
  • balexandre  · 技术社区  · 14 年前

    添加这样的新记录时

    contentcontacts c2=new contentcontacts();
    
    c2.updated_user=c2.created_user=loggeduserid;
    c2.created_date=c2.updated_date=datetime.utcnow;
    
    db.contentcontacts.addobject(c2);
    < /代码> 
    
    

    我得到了

    < Buff行情>

    无法将值空值插入列'main_email_support',表'sql2008r2.dbo.contentcontacts';列不允许空值。插入失败。语句已终止。

    < /块引用>

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

    为什么我会犯这样的错误?英孚不应该说:

    < Buff行情>

    “噢,它是一个nullvalue,所以我们添加列默认值代替”,

    < /块引用

    我得到

    无法将值空值插入列'main_email_support',表'sql2008r2.dbo.contentcontacts';列不允许空值。插入失败。语句已终止。

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

    alt text

    为什么我会犯这样的错误?英孚不应该这样说吗?

    “哦,这是一个 null 值,因此我们添加列默认值。”

    1 回复  |  直到 9 年前
        1
  •  6
  •   marc_s    9 年前

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

    那么这个SQL语句:

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

    出现此错误:

    消息515,级别16,状态2,行1
    无法将值null插入表的“testtext”列 'test.dbo.table_1';列不允许空值。插入失败。

    这里的问题是insert指定了所有列,也指定了那些具有默认值的列。插入操作试图用空值更新列。

    您有两种选择:

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

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