【问题标题】:How do I get the entity framework to stop setting the rowversion field?如何让实体框架停止设置 rowversion 字段?
【发布时间】:2009-04-07 14:13:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: entity-framework timestamp rowversion


    【解决方案1】:

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

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

    【讨论】:

    • 你的意思是:“这应该是任何 ORM 的必要功能”
    • 这个答案似乎有效,谢谢。我真的,真的很讨厌像这样的小东西溜进“生产就绪”软件。我是一个试图制作 C#/ASP.NET MVC 应用程序的 PHP 人,像这样愚蠢的事情,也需要几秒钟才能找到解决方案,需要几个小时才能解决。
    • 或者您可以只使用 NHibernate,它已经解决了所有这些问题并运行生产超过 5 年
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多