Entity Framework 更新时出错:字段为必填项

Entity Framework error during update: field is required

我在 .net 4.5.2 环境中使用 EF 6.2.0,数据库中的代码优先。 我有这个 DbSet:

<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

当我执行这段代码时:

Using dbContext As New DbModel
  dbContext.Database.Connection.ConnectionString = GetFbConnectionString()
  dbContext.Database.Connection.Open()

  Dim plant As PLANT4 = dbContext.PLANT4.Find(1)
  plant.RESET_COUNTER = 1
  dbContext.SaveChanges()
End Using

我收到错误:"DESCRIPTION1 field is required"。 在 SaveChanges 期间抛出异常。 我无法理解问题出在哪里,好像我在调试中看到 "plant",所有字段都在那里(ID_PLANT4 = 1 是现有行),特别是 DESCRIPTION1 不是 Nothing.

我可以简单地删除 "Required" 属性并且它有效,但该属性是数据库列不允许空值的结果,所以我认为这不是正确的方法。

我什至可以在 "Using" 语句之后添加这行代码:

dbContext.Configuration.ValidateOnSaveEnabled = False

它有效,但我再次认为这不是正确的方法。

这种行为的原因是什么?

最终我发现问题是:字段DESCRIPTION1默认填充了20个空格。它不为空,但它是一个仅由空格组成的字符串。出于未知原因,在验证期间,EF 将此字符串视为 null,并抛出异常,因为它是必填字段。

不需要

"Required" 属性,但我通过 "Code First from Database" 生成我的 POCO 类,因此如果 VARCHAR 字段声明为 "not null",它会自动生成"Required" 属性。现在我认为最好为 VARCHAR 列允许空值。