2011-05-12 3 views
4

Simple, mais encore mystérieux pour moi: Pourquoi les classes StringPropertyConfiguration (et toutes les autres PropertyConfiguration) ont-elles 2 surcharges pour IsConcurrencyToken()?Code EF First - IsConcurrencyToken()

La première:

public StringPropertyConfiguration IsConcurrencyToken()

Configure la propriété à utiliser comme un jeton d'accès concurrentiel optimiste.

Et la seconde:

public StringPropertyConfiguration IsConcurrencyToken(bool?)

ou non Configure la propriété doit être utilisé comme un jeton d'accès concurrentiel optimiste.

Pourquoi utiliseriez-vous l'un par rapport à l'autre? Comme je le vois, il n'y a aucune différence entre ces deux surcharges (atleast pas lorsque vous travaillez avec eux) ...

En utilisant la première vous écrire quelque chose comme:

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

Et en utilisant le deuxième vous écririez:

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

Ai-je manqué quelque chose?

Répondre

4

Mon opinion ...

Les IsConcurrencyToken() par défaut à true pour fournir une manière simple, fluide pour définir l'entité.

Le IsConcurrencyToken(bool?) permet à l'auteur de définir définitivement le ConcurrencyMode de l'entité. Ceci est utile pour les scénarios avancés:

  • Redéfinition l'attribut [ConcurrencyCheck] sur Poco
  • Permettre une convention (retirée dans EF 4.1 RTW) pour activer/désactiver le ConcurrencyMode basé sur une convention personnalisée

Enfin, je pense que IsConcurrencyToken(false) est mieux que IsNotConcurrencyToken().

+0

+1 pour le "IsConcurrencyToken (false) est meilleur que IsNotConcurrencyToken()". C'est la même chose mais lire la seconde trop vite pourrait faire penser que la propriété est un ConcurrencyToken (on pourrait simplement "sauter" le "NOT" en le lisant rapidement). –

Questions connexes