[英]Entitiy Framework Core preview 2 - default value for boolean
我们使用的是.Net Core 1,我们迁移到预览2(都是实体)。 在迁移之前,我们曾经在Entity Framework中为boolean
值设置默认值,如下所示:
modelBuilder.Entity<Customer>()
.ToTable("Customer")
.Property(a => a.Active)
.HasDefaultValue(true);
迁移后,我们没有更改任何内容,但现在我们在实体尝试创建此表时收到错误。 看起来它试图创建一个默认值为字符串,如“True”,而不是像以前一样。
有谁知道发生了什么变化?
更新数据库上的错误
实体类型“Customer”上的“bool”属性“Active”配置了数据库生成的默认值。 当属性值为'false'时,将始终使用此默认值,因为这是'bool'类型的CLR默认值。 考虑使用可空的'bool?' 键入,以便仅在属性值为“null”时使用默认值。
脚本生成:
CREATE TABLE `Customer` (
`Id` int NOT NULL,
`Active` bit NOT NULL DEFAULT 'True'
)
我遇到了同样的问题。 但是,在我自己研究这个问题后,我发现了一个相当棘手的解决方法 。 它似乎
如果你将bool值设置为可以为空,那么使用fluent api设置默认值,你应该没问题。 它不完美,但它的工作原理:
public class Year
{
public int Id { get; set; }
public string label { get; set; }
public int year { get; set; }
public bool? active { get; set; }
}
然后,在您的数据上下文中,设置默认值:
modelBuilder.Entity<Year>()
.Property("active")
.HasDefaultValue(true);
将新记录插入数据库时,不需要在对象声明中指定boolean属性。 下面,2017年的默认值为true。
var newYears = new List<Year>();
newYears.Add(new Year { label = "2019", year = 2019, active = false });
newYears.Add(new Year { label = "2018", year = 2018, active = true });
newYears.Add(new Year { label = "2017", year = 2017});
_context.Years.AddRange(newYears);
_context.SaveChanges();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.