1

我使用实体框架,并且我在表上有一个行版本(时间戳)字段用于并发。但是,在更新实体对象时,它不断尝试将 rowversion 列设置为 null,并且出现错误:

无法将“LmpDemoRequest”上的“VerCol”属性设置为“null”值。您必须将此属性设置为“Byte[]”类型的非空值。

我在实体定义中有 VerCol 列,但我无法删除“Setter”函数。

如何让实体框架停止尝试设置此列?

4

2 回答 2

4

您可以为 RowVersion 字段(例如 DateTime.Now)传递任意有效值。它们将被服务器生成的值覆盖。

对于 EF 的未来版本,应该支持“影子属性”,它存在于模型中,但不存在于您的类中。该功能在这种情况下很有用。

于 2009-04-07T14:18:40.743 回答
0

我有一个案例,其中一个视图包含一个表中的 RowVersion 列,该列在视图中被连接在一起......因此该列有时可能为空。

但是 EF4“知道”RowVersion 列不能为空,因此即使在简单的 LINQ 查询中,它也会引发 InvalidOperationException:

无法将“vVoteInfo”上的“PersonRowVersion”属性设置为“DBNull”值。您必须将此属性设置为 'Byte[]' 类型的非空值

我最后不得不更改视图以将其用于 RowVersion 列,这样 EF 就会很高兴:

coalesce(p._RowVersion, cast(0 as binary(6))) [PersonRowVersion]
于 2011-12-11T12:15:00.023 回答