我们使用的是.Net Core 1,我们迁移到预览2(都是实体)。
在迁移之前,我们曾在实体框架中为boolean
设置默认值,如下所示:
modelBuilder.Entity<Customer>()
.ToTable("Customer")
.Property(a => a.Active)
.HasDefaultValue(true);
迁移后,我们没有更改任何内容,但现在我们在实体尝试创建此表时收到错误。 看起来它试图创建一个默认值为字符串,如&#34; True&#34;而不是像以前一样。
有谁知道发生了什么变化?
更新数据库
上的错误&#39; bool&#39; property&#39; Active&#39;在实体类型&#39;客户&#39;配置了数据库生成的默认值。当属性值为&#39; false&#39;时,将始终使用此默认值,因为这是&#39; bool&#39;的CLR默认值。类型。考虑使用可空的“bool”&#39;改为输入,以便仅在属性值为&#39; null&#39;。
时才使用默认值
生成的脚本:
CREATE TABLE `Customer` (
`Id` int NOT NULL,
`Active` bit NOT NULL DEFAULT 'True'
)
答案 0 :(得分:0)
我遇到了同样的问题。但是,在我自己研究此问题之后,我发现了一个相当棘手的workaround。看来
如果将bool值设置为可为空,则使用流畅的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();