Entity framework EF中的ConcurrencyCheck属性方法存在问题

Entity framework EF中的ConcurrencyCheck属性方法存在问题,entity-framework,entity-framework-4,concurrency,entity-framework-4.1,Entity Framework,Entity Framework 4,Concurrency,Entity Framework 4.1,我在EF 4.1中找到了两种并发检查实体的方法: 字节数组的时间戳属性 其他类型的ConcurrencyCheck属性 第一个很简单。您只需将字节数组属性标记为时间戳,在数据库中创建附加列,然后瞧 第二种方法有问题。当我标记LastUpdateDate属性时,Enity Framework已开始生成用于并发检查的sql脚本 财产: [ConcurrencyCheck] public DateTime LastUpdateDate { get; set; } Sql: 但是EF不生成sql脚

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

  • 字节数组的时间戳属性
  • 其他类型的ConcurrencyCheck属性
第一个很简单。您只需将字节数组属性标记为时间戳,在数据库中创建附加列,然后瞧

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

财产:

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

但是EF不生成sql脚本来更新LastUpdateDate的值

有没有可能说EF在进行并发检查后更新LastUpdateDate,而不使用触发器或类似的东西

第二个问题: 当您具有类似LastUpdateDate属性(属性将显示在UI中)的内容时,在EF中使用并发检查的最佳实践是什么?是否最好使用LastUpdateDate检查一致性,并避免在表或表中为时间戳创建附加列
创建其他时间戳属性并放弃使用DateTime属性进行并发检查?

您是否尝试使用rowversion(时间戳)而不是DateTime数据类型来检查并发性

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

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


时间戳属性方法也是可以接受的,但如果您已经有了可用于并发检查的列,该怎么办?(例如,LastUpdateDate)@zonder,则需要使用sql查询或触发器来维护其值,因为传入的值必须与数据库中当前用于concurency检查的值相同。这就是我在这里要求建议的原因。也许可以对非ByteArray类型使用ConcurrencyCheck属性和其他属性,避免触发或大量额外工作。:)
select
...
where (([Id] = @3) and ([LastUpdateDate] = @4))
...
@4='value'