gpt4 book ai didi

c# - Entity Framework Core 预览版 2 - bool 值的默认值

转载 作者:行者123 更新时间:2023-11-30 12:55:50 31 4
gpt4 key购买 nike

我们使用的是 .Net Core 1,然后我们迁移到了 Preview 2(均带有 Entity)。在迁移之前,我们曾经在 Entity Framework 中为 boolean 设置默认值,如下所示:

modelBuilder.Entity<Customer>()
.ToTable("Customer")
.Property(a => a.Active)
.HasDefaultValue(true);

迁移后,我们没有做任何更改,但现在当实体尝试创建此表时出现错误。看起来它正在尝试创建一个默认值作为字符串,如“True”,而不是像以前那样。

有人知道发生了什么变化吗?

ERROR on update-database

The 'bool' property 'Active' on entity type 'Customer' is configured with a database-generated default. This default will always be used when the property has the value 'false', since this is the CLR default for the 'bool' type. Consider using the nullable 'bool?' type instead so that the default will only be used when the property value is 'null'.

脚本生成:

CREATE TABLE `Customer` (
`Id` int NOT NULL,
`Active` bit NOT NULL DEFAULT 'True'
)

最佳答案

我遇到了同样的问题。但是,我发现了一个相当棘手的 workaround在自己研究了这个问题之后。看来

如果您将 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);

当您向数据库中插入新记录时,您不需要在对象声明中指定 bool 属性。下面,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();

关于c# - Entity Framework Core 预览版 2 - bool 值的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328868/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com