c# - 实体框架中一个或多个实体的可空布尔属性验证失败
问题描述
我的班级看起来像这样,我添加了IsModified
可以为空的新属性。我可以只使用 Name 和 Key 属性创建一个类型的新实体A
,但是当我尝试更新IsModified
db 中为空的任何现有记录的键时,我从 Entity Framework 收到此错误:
System.Data.Entity.Validation.DbEntityValidationException。
IsModified
context.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]
可以为空,所以我不确定为什么该字段仍然是必需的。
解决方案
这里的问题是布尔值不能配置为空。EF 始终认为它是必需的。我更改IsModified bit null
为IsModified bit not null default 1
. 并使用 Migration 将现有记录更新为默认值。参考 - https://docs.microsoft.com/en-us/ef/core/modeling/required-optional。
推荐阅读
- android - 隐藏时将约束布局中的一个视图的属性复制到另一个视图
- python - 如果存在,如何为每行返回最低的非 nan 值
- c# - 使用c#将科学记数法转换为长数?
- asp.net-mvc - MVC + API + 身份验证服务器项目的正确结构是什么
- jquery - 段落(
) 通过 jquery html() 和 load() 方法嵌套
- javascript - SyntaxError:编译 ejs 时出现意外的 token.ejs
- powershell - 使用 powershell 在共享文件夹中过去 1 年未访问的文件列表
- storybook - 如何在 Storybook 5 中设置网格单元格大小?
- java - JPA,删除子实体时删除实体
- javascript - 未捕获的类型错误:无法读取未定义的属性“ModelBufferGeometry”