【问题标题】:Entity Framework Migrations: convert decimal? to decimal with default value for nulls实体框架迁移:转换十进制?使用 null 的默认值转换为十进制
【发布时间】:2012-02-23 15:59:02
【问题描述】:

我得到SqlCeException ... The column cannot contain null values. [ Column name = Subtotal 当我运行以下实体框架迁移时。

public override void Up()
{
    AlterColumn("BuildingOrders", "Subtotal",
        c => c.Decimal(nullable: false, precision: 18, scale: 2));
}

这是设置默认值的正确方法吗?这似乎太容易了:)

public override void Up()
{
    AlterColumn("BuildingOrders", "Subtotal",
        c => c.Decimal(nullable: false, precision: 18, scale: 2, defaultValue: 0));
}

我在看到similar 关于 ruby​​ on rails 的问题后尝试了这个。

【问题讨论】:

    标签: entity-framework ef-code-first sql-server-ce entity-framework-migrations


    【解决方案1】:

    这种方式是行不通的。您在数据库中设置了默认值,但未使用它。当映射列不可为空时,您不能在类中将您的属性定义为可空。仅当您不向该列中插入任何值时才应用数据库中的默认值,但 EF 始终将值插入到不是数据库生成的所有列中(反过来,数据库生成的列的值不能在应用程序中定义)所以在这种情况下您将您的属性定义为可为空,并且 EF 显式插入 null => 异常。

    【讨论】:

    • 好的,我会写一个方法来将任何空值转换为 0.00 - 谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2011-07-28
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多