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 列允许空值。
我在 .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 列允许空值。