Entitiy Framework Core预览2 - 布尔值的默认值

时间:2017-07-26 13:47:42

标签: c# .net asp.net-core entity-framework-6

我们使用的是.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'
   )

1 个答案:

答案 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();