32

如何使用 EntityFramework Code First FluentAPI 为 bool 属性设置默认值?

就像是:

Property(l => l.PropertyFlag).HasColumnType("bit").DefaultValue(1);
4

4 回答 4

31

好消息,代码优先现在支持这一点。在生成的迁移的“Up()”方法中,使用以下语法指定默认值:

AddColumn("[table name]", "[column name]", c => c.Boolean(nullable: false, defaultValue: false));

“AddColumn”方法的 MSDN

于 2014-02-11T20:46:23.130 回答
9

我不确定一种流畅的方式,但您可以简单地在无参数构造函数中设置属性......

public class MyTable
{
    public MyTable()
    {
        CanSetDefault = true;
    }

    public bool CanSetDefault {get; set; }
}

更新

一个快速的谷歌建议使用流利的 api 是不可能的......
http://social.msdn.microsoft.com/Forums/en-US/ad854e28-02f5-451b-9000-c8bcb1355d0b/codefirst-ctp5-and-default -values?forum=adonetefx

于 2013-11-25T17:49:19.117 回答
2

这里的另一个选项是用您自己的覆盖默认的SqlServerMigrationSqlGenerator类。然后,您可以在 Generate 方法中注入您希望发生的某些事情(例如,默认值)。这样做的好处是您也可以在其他应用程序中使用它,因为它非常通用。是一个很好的解释。

 internal class CustomSqlServerMigrationSqlGenerator : SqlServerMigrationSqlGenerator
{

    protected override void Generate(AddColumnOperation addColumnOperation)
    {
        SetCreatedUtcColumn(addColumnOperation.Column);

        base.Generate(addColumnOperation);
    }

    protected override void Generate(CreateTableOperation createTableOperation)
    {
        SetCreatedUtcColumn(createTableOperation.Columns);

        base.Generate(createTableOperation);
    }


    private static void SetCreatedUtcColumn(IEnumerable<ColumnModel> columns)
    {
        foreach (var columnModel in columns)
        {
            SetCreatedUtcColumn(columnModel);
        }
    }

    private static void SetCreatedUtcColumn(PropertyModel column)
    {
        if (column.Name == "CreatedUtc")
        {
            column.DefaultValueSql = "GETUTCDATE()";
        }
    }


}
于 2015-12-01T14:01:06.840 回答
0

由于 EF 没有我需要的功能,例如默认值和作为外​​键的唯一键,我们必须将 ORM 从 EF 更改为 NHibernate。在我看来,NHibernate 比 EF 6.X 有更多的功能。

于 2014-01-26T00:19:47.017 回答