并发时间戳列保持为null,带有计算

时间:2015-06-04 09:13:45

标签: entity-framework

我使用EF - Model First来保存我的实体。 我添加了一个专栏" RowVersion"选项:

enter image description here

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

但是当我在表中添加/插入实体时,属性RowVersion保持为null。 现在插入没有了,因为我将列设置为可空,但是它继续运行到一个异常,告诉我RowVersion是NULL。

我怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

我看到完全相同的行为。我整个下午都在努力工作,我唯一可以开始工作的是在这个链接上实现解决方案: http://www.undisciplinedbytes.com/2012/03/creating-a-timestamp-column-with-entity-framework/

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

带有模型优先方法的时间戳列

现在,使用模型优先方法设置此列有点棘手。 EF的模型本身没有内置支持,所以我们必须破解代码生成模板以满足我们的需求。

使用模型优先方法设置时间戳列需要做的是:

  1. 将名为“Timestamp”的属性添加到EF模型中的实体
  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. 编辑说明:
  8. 的行

    [<#= Id(prop.Name)#>]<#= prop.ToStoreType()#> <#= WriteIdentity(prop,targetVersion)#> <#= WriteNullable(prop.Nullable)#><#=(p< entitySet.ElementType.Properties.Count - 1)? “,”:“”“#>

    将其更改为:

    [<#= Id(prop.Name)#>]< #if(string.Compare(prop.Name,“TimeStamp”,true)== 0){#> TIMESTAMP<#} else {#><#= prop.ToStoreType()#><#}#> <#= WriteIdentity(prop,targetVersion)#> <#= WriteNullable(prop.Nullable)#><#=(p< entitySet.ElementType.Properties.Count - 1)? “,”:“”“#>

    这会将名为“Timestamp”的任何列(不区分大小写)更改为Timestamp列。

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