首页 > 解决方案 > 实体框架中一个或多个实体的可空布尔属性验证失败

问题描述

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

System.Data.Entity.Validation.DbEntityValidationException。IsModifiedcontext.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,
 )

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

标签: c#sqlsql-server-2008entity-framework-6

解决方案


这里的问题是布尔值不能配置为空。EF 始终认为它是必需的。我更改IsModified bit nullIsModified bit not null default 1. 并使用 Migration 将现有记录更新为默认值。参考 - https://docs.microsoft.com/en-us/ef/core/modeling/required-optional


推荐阅读