Entity framework 更新期间实体框架错误:字段为必填字段

Entity framework 更新期间实体框架错误:字段为必填字段,entity-framework,entity-framework-6,ef-code-first,Entity Framework,Entity Framework 6,Ef Code First,我在.NET4.5.2环境中使用EF6.2.0,代码首先来自数据库。 我有这个数据库集: <Table("Firebird.PLANT4")> Partial Public Class PLANT4 <Key> <DatabaseGenerated(DatabaseGeneratedOption.None)> Public Property ID_PLANT4 As Integer Public Property STATUS As Inte

我在.NET4.5.2环境中使用EF6.2.0,代码首先来自数据库。 我有这个数据库集:

<Table("Firebird.PLANT4")>
Partial Public Class PLANT4
  <Key>
  <DatabaseGenerated(DatabaseGeneratedOption.None)>
  Public Property ID_PLANT4 As Integer

  Public Property STATUS As Integer

  <Required>
  <StringLength(20)>
  Public Property DESCRIPTION1 As String

  Public Property COUNTER As Long

  Public Property RESET_COUNTER As Integer
End Class
我得到错误:“DESCRIPTION1字段是必需的”。 在保存更改期间引发异常。 我不明白问题出在哪里,就像我在调试中看到“工厂”一样,所有字段都在那里(ID_PLANT4=1是一个现有行),特别是DESCRIPTION1不是空的

我可以简单地删除“Required”属性,它可以工作,但是该属性是db列不允许null的结果,所以我认为这不是正确的方法

我甚至可以在“Using”语句之后添加这行代码:

dbContext.Configuration.ValidateOnSaveEnabled = False
这是可行的,但我认为这不是正确的方法


这种行为的原因是什么?

最终我发现问题是:字段描述1默认填充了20个空格。它不是null,但它是一个仅由空格组成的字符串。由于未知原因,在验证过程中,该字符串被类似于null的EF处理,并引发异常,因为它是必填字段

不需要“Required”属性,但我通过“Code First from Database”生成POCO类,所以如果VARCHAR字段声明为“not null”,它将自动生成“Required”属性。现在我认为最好允许VARCHAR列为null

dbContext.Configuration.ValidateOnSaveEnabled = False