EF 代码优先 - IsConcurrencyToken()

ebb*_*ebb 4 c# entity-framework ef-code-first

简单,但对我来说很神秘:为什么StringPropertyConfiguration(和所有其他 PropertyConfiguration)类有 2 个重载IsConcurrencyToken()

首先:

public StringPropertyConfiguration IsConcurrencyToken()

配置要用作乐观并发令牌的属性。

第二个:

public StringPropertyConfiguration IsConcurrencyToken(bool?)

配置是否将属性用作乐观并发令牌。

你为什么要使用一个?在我看来,这两个重载之间根本没有区别(至少在使用它们时没有区别)......

通过使用第一个,您将编写如下内容:

modelBuilder.Entity<Author>()
    .Property(x => x.Name)
    .IsConcurrencyToken();
Run Code Online (Sandbox Code Playgroud)

通过使用第二个你会写:

modelBuilder.Entity<Author>()
    .Property(x => x.Name)
    .IsConcurrencyToken(true/false/null);
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Ed *_*pel 7

我的看法...

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

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

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

最后,我认为IsConcurrencyToken(false)IsNotConcurrencyToken().

  • “IsConcurrencyToken(false) 优于 IsNotConcurrencyToken()”的 +1。它是一样的,但是太快地阅读第二个可能会使人认为该属性是一个 ConcurrencyToken(一个人可能只是在快速阅读时“跳过”“NOT”)。 (2认同)