ECC*_*Dan 31 .net c# entity-framework ef-code-first entity-framework-6
在旧版应用程序中,大多数字符串属性不能为null,并且需要具有默认值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.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,或者我注定要初始化实体构造函数中的所有字符串?
Col*_*lin 45
不幸的是,现在的答案是"不".
但您可以投票支持更好地支持默认值
编辑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<Blog>()
.Property(b => b.Rating)
.HasDefaultValue(3);
}
Run Code Online (Sandbox Code Playgroud)
EF Core 2.0于2017年8月14日发布
Gh6*_*h61 16
现在答案是肯定的:
AddColumn("[table name]",
"[column name]",
c => c.Boolean(nullable: false, defaultValue: false));
Run Code Online (Sandbox Code Playgroud)
您可以在构造函数中设置默认值
class Foo : Model
{
public bool DefaultBool { get; set; }
public Foo()
{
DefaultBool = true;
}
}
Run Code Online (Sandbox Code Playgroud)
创建新项时Foo
,它将为属性设置true值DefaultBool
.这不是默认约束,但它可以工作.