Entity Framework 迁移的默认值如何工作?

How does the DefaultValue for Entity Framework Migrations work?

我正在尝试将我的其中一个列 (IsActive) 的默认值设置为默认值,如下所示,但它永远不起作用。我尝试过单独使用 DefaultValue 和 DefaultValueSql,正如您在下面看到的,在这种情况下,我尝试将它们结合使用。知道我是否遗漏了什么吗?

public partial class Initial : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.TestDB",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Name = c.String(nullable: false, maxLength: 64),
                    Description = c.String(nullable: false, storeType: "ntext"),
                    Comment = c.String(maxLength: 255),
                    IsActive = c.Boolean(nullable: false, defaultValueSql: "1", defaultValue: true),
                    CreatedOn = c.DateTimeOffset(nullable: false, precision: 7),
                    CreatedBy = c.String(maxLength: 128),
                    ModifiedOn = c.DateTimeOffset(nullable: false, precision: 7),
                    ModifiedBy = c.String(maxLength: 128),
                })
            .PrimaryKey(t => t.GlobalKpiId);

    }

    public override void Down()
    {
        DropTable("dbo.TestDB");
    }

即使在这样做之后,每当我在数据库中创建记录时,IsActive 的值始终为 false。

不要在 CreateTable 中添加该列并尝试以这种方式添加:

public override void Up()
{ 
  //...   
  AddColumn("dbo.TestDB", "IsActive", c => c.Boolean(nullable: false, defaultValue: true));
} 

另一种变体是在实体的构造函数中初始化 属性:

public YourEntity()
{ 
   IsActive=true;
}