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

use*_*311 6 c# sql sql-server-2008 entity-framework-6

我的班级看起来像这样,我添加了IsModified可以为空的新属性.我可以A仅使用Name和Key属性创建一个新的类型实体,但是当我尝试更新IsModifieddb中任何现有记录为null的键时,我从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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,
 )
Run Code Online (Sandbox Code Playgroud)

我正在使用Entity Framework v6和代码优先方法.[IsModified]是可空的,所以我不确定为什么仍然需要这个领域.

use*_*311 2

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