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

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

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

protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Properties().Configure(c => { c.HasMaxLength(255); if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false)) { c.IsRequired(); // I want to set a default value (string.empty) here. } } 

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

现在答案是肯定的 :

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

不幸的是,现在的答案是’不’。

但您可以投票支持更好地支持默认值

编辑2015年3月30日:它将进入EF7 … 支持Code First中的数据库默认值

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

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

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

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

您可以在构造函数中设置默认值

 class Foo : Model { public bool DefaultBool { get; set; } public Foo() { DefaultBool = true; } } 

当您创建新的Foo ,它将为属性DefaultBool设置true值。 这不是默认约束,但它可以工作。

我在这里找到了这个例子

 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; } } } 

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

例如:

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