2011-05-12 119 views
4

簡單但對我而言很神祕:爲什麼StringPropertyConfiguration(和所有其他PropertyConfiguration)類對IsConcurrencyToken()有2個重載?EF Code First - IsConcurrencyToken()

第一:

public StringPropertyConfiguration IsConcurrencyToken()

配置以用作 樂觀併發令牌的特性。

而第二個:

public StringPropertyConfiguration IsConcurrencyToken(bool?)

配置屬性 是否是用作樂觀併發 令牌。

爲什麼你會用另一個呢?在我看來,有沒有區別在所有兩個重載之間(ATLEAST不與他們合作時)...

通過使用首先你會寫是這樣的:

modelBuilder.Entity<Author>() 
    .Property(x => x.Name) 
    .IsConcurrencyToken(); 

而且通過使用第二你會寫:

modelBuilder.Entity<Author>() 
    .Property(x => x.Name) 
    .IsConcurrencyToken(true/false/null); 

我錯過了什麼?

回答

4

我的意見了......

IsConcurrencyToken()默認爲真,以提供一種簡單,流暢的方式來定義的實體。

IsConcurrencyToken(bool?)允許作者明確設置實體的ConcurrencyMode。這種先進的方案是有用的:

  • 重寫的POCO
  • 允許公約的[ConcurrencyCheck]屬性,以使(在EF 4.1 RTW刪除)/禁用基於一些自定義的約定ConcurrencyMode

最後,我認爲IsConcurrencyToken(false)IsNotConcurrencyToken()更好。

+0

+1爲「IsConcurrencyToken(false)比IsNotConcurrencyToken()」更好。這是相同的,但是讀取第二個太快可能會讓人認爲該屬性是一個ConcurrencyToken(在快速閱讀時可能會「跳過」「NOT」)。 – 2012-01-23 13:59:19