我在EF 4.1中找到了两种实体并发检查方法:
第一个很简单。您只需将字节数组属性标记为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属性进行并发检查?
答案 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