是否可以使用实体框架将 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&lt;long&gt;

...
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 的连接问题

如何将 sql server express 数据库附加到实体框架中的项目

如何从实体框架 DbContext 收集当前的 SQL Server 会话 ID?