是否可以使用实体框架将 SQL Server 的 rowversion 类型映射到比 byte[] 更友好的东西?
Posted
技术标签:
【中文标题】是否可以使用实体框架将 SQL Server 的 rowversion 类型映射到比 byte[] 更友好的东西?【英文标题】:Is it possible to map SQL Server's rowversion type to something friendlier than byte[] using Entity Framework? 【发布时间】:2011-11-07 09:42:12 【问题描述】:当我在存储模型中声明一个 SQL Server rowversion 字段并让实体框架进行其默认映射时,rowversion 字段被映射到一个字节数组。
是否可以将其映射到更友好的类型(这将允许从 .NET 端表达相等和比较运算符)?鉴于 rowversion 的底层类型是 binary(8),我相信可以将其映射为 64 位整数。
以下是当前使用的属性定义:
SSDL:
<Property Name="lastModifiedRowVersion" Type="timestamp" Nullable="false" StoreGeneratedPattern="Computed" />
CSDL:
<Property Name="LastModifiedRowVersion" Type="Binary" FixedLength="true" MaxLength="8" Nullable="false" ConcurrencyMode="Fixed" />
【问题讨论】:
【参考方案1】:很遗憾,这是不可能的,因为 EF 没有任何类型的数据转换功能。如果要使用 64 位整数,则仍必须映射字节数组并公开第二个非映射属性,将数组转换为整数。 Here 你有更多关于在应用程序中比较时间戳的信息。
【讨论】:
【参考方案2】:我为此使用了一个计算列。 ISNULL
表示 EF POCO 将是 long
而不是 Nullable<long>
。
...
Revision ROWVERSION,
Revision64 AS ISNULL(CAST(Revision AS BIGINT), 0),
...
【讨论】:
以上是关于是否可以使用实体框架将 SQL Server 的 rowversion 类型映射到比 byte[] 更友好的东西?的主要内容,如果未能解决你的问题,请参考以下文章
实体框架将 DateTimeOffset 映射到 SQL Server DateTime
同时将实体框架与 SQL Server 和 SQLite 数据库一起使用
如果我们使用实体框架和代码优先方法,是不是可以在给定路径上创建数据库(Sql Server compact)?
在 Visual Studio 中使用实体框架与 SQL Server 的连接问题