在旧版应用中,大多数字符串属性都不能为空,并且需要具有默认值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.
}
}
有没有办法做到这一点,或者我注定要初始化实体构造函数中的所有字符串?
答案 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)
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;
}