实体框架中可空布尔属性的一个或多个实体的验证失败



我的类看起来像这样,我添加了可以为空的新属性IsModified。我可以仅使用 Name 和 Key 属性创建类型 A 的新实体,但是当我尝试更新 db 中 IsModified 为 null 的任何现有记录的键时,我从实体框架收到此错误:

System.Data.Entity.Validation.DbEntityValidationException。上下文中需要IsModified字段。SaveChangesAsync((.

型号类别:

public class A
{
    public long ID { get; set; }
    public string Key { get; set; }
    public bool? IsModified { get; set; }
    public string Name { get; set; }
    public A()
    {
        this.IsModified = false;
    }
}

SQL Server 表:

CREATE TABLE [dbo].[A]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](max) NOT NULL,
    [Key] [nvarchar](max) NOT NULL,
    [IsModified] [bit] NULL,
 )

我正在以代码优先的方法使用实体框架 v6。 [IsModified]是可为空的,所以我不确定为什么该字段仍然是必需的。

这里的问题是布尔值无法配置为 null。EF 将始终认为它是必需的。我把IsModified bit null改成了IsModified bit not null default 1.并使用迁移使用默认值更新现有记录。 参考 - https://learn.microsoft.com/en-us/ef/core/modeling/required-optional。

你如何迁移?清除表dbo.__MigrationHistory。我经常遇到类似的EF问题,在大多数情况下,清理此表会有所帮助。(它肯定会起作用,我在电脑中重现这种情况(

最新更新