【问题标题】:IsRowVersion can only be configured for Byte array propertiesIsRowVersion 只能为字节数组属性配置
【发布时间】:2013-12-04 18:35:25
【问题描述】:

我最近通过 NuGet 更新程序从 EntityFramework 5 升级到 6。一切似乎都很顺利,我构建并执行了我的应用程序。当我试图从数据库中检索第一个实体时,我收到了这个错误:

属性“UpdatedDate”不是字节数组。 IsRowVersion 只能 为字节数组属性配置。

这是它所指的一段代码:

[Timestamp]
public virtual DateTime UpdatedDate { get; set; }

我尝试删除时间戳属性,但无论如何都得到相同的错误。如何解决此问题,以便我可以使用 EF6 运行我的应用程序?

【问题讨论】:

  • 您的代码错误。 ROWVERSION /TIMESTAMP 是字节数组,与时间无关。 technet.microsoft.com/en-us/library/ms182776.aspx
  • 正是 SLaks 所说的。 Timestamp 这个名字非常在这方面具有误导性。不幸的是,它被转移到了 EntityFramework...
  • 我不明白。表列是一个日期时间,并且模型属性上有一个 Timestamp 属性。即使这样是错误的,为什么我在删除时间戳属性时会收到相同的错误消息?
  • 您确定在删除Timestamp 属性后已正确清理和重建代码吗?而且您没有在模型配置中手动调用IsRowVersion()?并且列的类型是数据库中的datatime,您只是先使用代码?
  • 原来我在另一个类上有一个时间戳属性。错误消息一定非常相似,以至于我无法识别对第二类的引用。谢谢 nemesv。

标签: c# entity-framework ef-code-first entity-framework-6


【解决方案1】:

Attributes in EF

如果你使用[TimeStamp]属性,那么属性应该是byte[]
然后将其映射到 SQL Server 中的 Rowversion

如果您想要一些其他字段类型作为并发字段。 使用属性[ConcurrencyCheck]

【讨论】:

  • 或者在 Fluent API 中:modelBuilder.Entity().Property(e => e.UpdatedDate).IsConcurrencyToken();
猜你喜欢
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2011-12-14
  • 2016-12-04
  • 1970-01-01
  • 2017-06-29
  • 2014-05-18
相关资源
最近更新 更多