如何让实体框架停止设置rowversion字段?

时间:2009-04-07 14:14:00

标签: entity-framework timestamp rowversion

我正在使用Entity Framework,我在表上有一个rowversion(timestamp)字段用于并发。但是,在更新实体对象时,它会不断尝试将rowversion列设置为null,并且出现错误:

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

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

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

2 个答案:

答案 0 :(得分:4)

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

对于EF的未来版本,应该支持“阴影属性”,它存在于模型中但不存在于类中。该功能在此类情况下非常有用。

答案 1 :(得分:0)

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

但是EF4'知道'RowVersion列不能为空,所以即使在简单的LINQ查询中,它也会抛出InvalidOperationException:

  

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

的非null值

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

coalesce(p._RowVersion, cast(0 as binary(6))) [PersonRowVersion]