EF Code First - IsConcurrencyToken()

4
简单而神秘:为什么 StringPropertyConfiguration(以及所有其他 PropertyConfiguration)类有两个重载的 IsConcurrencyToken()
第一个: public StringPropertyConfiguration IsConcurrencyToken() 配置该属性用作乐观并发标记。
第二个: public StringPropertyConfiguration IsConcurrencyToken(bool?) 配置该属性是否作为乐观并发标记。
为什么要使用其中之一?在我看来,这两种重载之间没有任何区别(至少在使用它们时没有区别)......
使用第一个,您将编写以下内容:
modelBuilder.Entity<Author>()
    .Property(x => x.Name)
    .IsConcurrencyToken();

通过使用第二种方法,您可以编写如下内容:
modelBuilder.Entity<Author>()
    .Property(x => x.Name)
    .IsConcurrencyToken(true/false/null);

我有什么遗漏吗?

1个回答

7

我的观点...

IsConcurrencyToken() 的默认值为 true,提供了一种简单、流畅的方式来定义实体。

IsConcurrencyToken(bool?) 允许作者明确设置实体的 ConcurrencyMode。这对于高级场景非常有用:

  • 覆盖 POCO 上的 [ConcurrencyCheck] 属性
  • 允许约定(在 EF 4.1 RTW 中已删除)根据某些自定义约定启用/禁用 ConcurrencyMode

最后,我认为 IsConcurrencyToken(false)IsNotConcurrencyToken() 更好。


2
对于"IsConcurrencyToken(false)比IsNotConcurrencyToken()更好的理由是+1。它们本质上是相同的,但是快速阅读第二个选项时可能会让人误以为该属性是一个并发标记(在快速阅读中可能会跳过“NOT”)。" - Anderson Matos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接