繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM