我使用实体框架,并且我在表上有一个行版本(时间戳)字段用于并发。但是,在更新实体对象时,它不断尝试将 rowversion 列设置为 null,并且出现错误:
无法将“LmpDemoRequest”上的“VerCol”属性设置为“null”值。您必须将此属性设置为“Byte[]”类型的非空值。
我在实体定义中有 VerCol 列,但我无法删除“Setter”函数。
如何让实体框架停止尝试设置此列?
我使用实体框架,并且我在表上有一个行版本(时间戳)字段用于并发。但是,在更新实体对象时,它不断尝试将 rowversion 列设置为 null,并且出现错误:
无法将“LmpDemoRequest”上的“VerCol”属性设置为“null”值。您必须将此属性设置为“Byte[]”类型的非空值。
我在实体定义中有 VerCol 列,但我无法删除“Setter”函数。
如何让实体框架停止尝试设置此列?
您可以为 RowVersion 字段(例如 DateTime.Now)传递任意有效值。它们将被服务器生成的值覆盖。
对于 EF 的未来版本,应该支持“影子属性”,它存在于模型中,但不存在于您的类中。该功能在这种情况下很有用。
我有一个案例,其中一个视图包含一个表中的 RowVersion 列,该列在视图中被连接在一起......因此该列有时可能为空。
但是 EF4“知道”RowVersion 列不能为空,因此即使在简单的 LINQ 查询中,它也会引发 InvalidOperationException:
无法将“vVoteInfo”上的“PersonRowVersion”属性设置为“DBNull”值。您必须将此属性设置为 'Byte[]' 类型的非空值
我最后不得不更改视图以将其用于 RowVersion 列,这样 EF 就会很高兴:
coalesce(p._RowVersion, cast(0 as binary(6))) [PersonRowVersion]