我的类看起来像这样,我添加了可以为空的新属性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问题,在大多数情况下,清理此表会有所帮助。(它肯定会起作用,我在电脑中重现这种情况(