EF中ConcurrencyCheck属性方法的问题

时间:2011-04-22 13:41:03

标签: entity-framework entity-framework-4 concurrency entity-framework-4.1

我在EF 4.1中找到了两种实体并发检查方法:

  • 字节数组的TimeStamp属性
  • 其他类型的ConcurrencyCheck属性

第一个很简单。您只需将字节数组属性标记为TimeStamp,在数据库中创建其他列即可...

我遇到了第二种方法的问题。当我标记LastUpdateDate属性时,Enity Framework已经开始生成用于并发检查的sql脚本。

属性:

[ConcurrencyCheck]
public DateTime LastUpdateDate { get; set; }

SQL:

select
...
where (([Id] = @3) and ([LastUpdateDate] = @4))
...
@4='value'

但EF不会生成用于更新LastUpdateDate值的SQL脚本吗?

是否可以说EF在没有触发器的情况下进行并发检查后更新LastUpdateDate或类似的内容?

第二个问题: 当你有类似LastUpdateDate属性(属性将在UI中显示)时,在EF中使用并发检查的最佳做法是什么?使用LastUpdateDate检查concurency是否更好,并避免在表中为TimeStamp创建addtional列或 创建额外的TimeStamp属性并放弃使用DateTime属性进行并发检查?

1 个答案:

答案 0 :(得分:3)

您是否尝试使用rowversion(timestamp)而不是DateTime数据类型来检查是否存在concurency?

我会使用时间戳,因为您确定系统会为您更新它。此外,价值将非常准确。

以下博客文章将为您提供有关如何映射时间戳的更多信息。 第一个显示如何将时间戳用作并发检查。

Code First Optimistic Concurrency with Fluent Assertions

Round tripping a timestamp field with EF4.1 Code First and MVC 3