【问题标题】:Concurrency timestamp column stays null with computed并发时间戳列在计算时保持为空
【发布时间】:2015-06-04 09:13:45
【问题描述】:

我正在使用 EF - Model First 来保存我的实体。 我添加了一个带有选项的列“RowVersion”:

在元数据类中,我添加了注释 [Timestamp]。

但是当我在表中添加/插入一个实体时,属性 RowVersion 保持为空。 现在插入不会,因为我将列设置为可为空,否则它会一直遇到异常,告诉我 RowVersion 为 NULL。

我该如何解决这个问题?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    我看到了完全相同的行为。我整个下午都在做这件事,唯一能做的就是在这个链接上实施解决方案: http://www.undisciplinedbytes.com/2012/03/creating-a-timestamp-column-with-entity-framework/

    以下是从链接复制的步骤:

    采用模型优先方法的时间戳列

    现在,使用模型优先方法设置此列有点棘手。 EF 模型本身(目前)还没有对此的内置支持,因此我们必须破解代码生成模板才能满足我们的需求。

    使用模型优先方法设置时间戳列需要做的事情如下:

    1. 为 EF 模型中的实体添加一个名为“Timestamp”的属性
    2. 将类型设置为二进制
    3. 将 nullable 设置为 false
    4. 将 StoreGeneratedPattern 设置为 Computed
    5. 将 ConcurrencyMode 设置为 Fixed
    6. 创建 SSDLToSQL10.tt 的副本(通常位于 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen)
    7. 编辑以下内容:

    []

    改成:

    [] TIMESTAMP

    这会将任何称为“时间戳”(不区分大小写)的列更改为时间戳列。

    1. 单击实体画布并将 DDL 生成模板设置为该文件的新副本
    2. 单击从模型生成数据库 10.享受新的并发感知数据访问!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多