如何使用Entity Framework 6 Code First设置默认值约束?

时间:2013-11-22 03:27:52

标签: c# .net entity-framework ef-code-first entity-framework-6

在旧版应用中,大多数字符串属性都不能为空,并且需要具有默认值string.empty。

我知道可以通过迁移执行此操作,但我正在寻找使用流畅配置界面执行此操作的方法:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<string>().Configure(c =>
        {
            c.HasMaxLength(255);

            if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
            {
                c.IsRequired();
                // I want to set a default value (string.empty) here.
            }
    }

有没有办法做到这一点,或者我注定要初始化实体构造函数中的所有字符串?

5 个答案:

答案 0 :(得分:43)

不幸的是,现在的答案是“不”。

但你可以投票给Better support for default values

编辑2015年3月30日: 它来自EF7 ...... Support database default values in Code First

编辑2017年1月30日:默认数据库值的一般支持是EF Core(EF7的新名称)的一部分...... Default values

编辑2018年1月17日:我不确定人们为什么评论说EF7仍然是一个“白日梦”。 EF7(更名为EF Core)于2016年6月27日发布,支持使用FluentAPI在Code First中设置默认值,如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.Rating)
        .HasDefaultValue(3);
}

EF Core 2.0于2017年8月14日发布

答案 1 :(得分:16)

现在答案是Yes

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

答案 2 :(得分:7)

您可以在构造函数

中设置默认值
class Foo : Model
{
    public bool DefaultBool { get; set; }

    public Foo()
    {
        DefaultBool = true;
    }
}

创建新Foo时,它会为属性DefaultBool设置真值。这不是默认约束,但它可以工作。

答案 3 :(得分:-2)

我找到了this example here

public class Person {
    private const int DEFAULT_AGE = 18;
    private int _age = DEFAULT_AGE;
    [DefaultValue(DEFAULT_AGE)]
    public int Age {
        get { return _age; }
        set { _age = value; }
    }
}

答案 4 :(得分:-6)

我发现只在实体属性上使用Auto-Property Initializer就足以完成工作。

例如:

public class Thing {
    public bool IsBigThing{ get; set; } = false;
}