Tout ce que vous pouvez configurer avec DataAnnotations est aussi possible avec l'API Fluent. L'inverse n'est pas vrai. Donc, du point de vue de la configuration d'options et de flexibilité, la fluidité de l'API est "mieux".
Exemples de Configuration (pour sûr pas une liste complète) qui sont possibles dans l'API Fluent, mais pas avec DataAnnotations (aussi loin que je peux voir):
-
Éteignez les suppressions en cascade:
.WillCascadeOnDelete(false)
-
Spécifier le nom de la colonne clé étrangère dans la base de données lorsque la clé n'est pas exposée dans votre modèle d'objet:
.Map(conf => conf.MapKey("MyForeignKeyID"))
-
Particules fines de réglage de relations, en particulier dans tous les cas où un seul côté d'une association est exposée dans le modèle d'objet:
.WithMany(...)
, WithOptional(...)
, WithRequiredDependent(...)
, WithRequiredPrincipal(...)
-
Spécification de l'héritage de mapping entre le modèle objet et les tables de base de données (Table Par Hiérarchie, Table Par Type de Tableau, Par-Béton de Classe):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Edit: Microsoft considère l'API Fluent comme une "fonction avancée" (Citation d' ici):
L'API fluent est considérée comme un plus
fonctionnalité avancée et nous
vous recommandons d'utiliser les Annotations de Données
sauf si vos besoins nécessitent que vous
pour utiliser l'API fluent.
Mais à mon avis vous atteignez les limites de DataAnnotations très rapidement (sauf peut-être pour les très simples modèles d'objet). Si vous ne pouvez affiner votre modèle avec DataAnnotations plus votre dernier recours est de suivre le mappage par défaut de conventions (en nommant vos propriétés en fonction de ces règles). Actuellement, vous ne pouvez pas écraser les conventions (seulement les désactiver; MS a annoncé à donner des options de configuration pour les conventions à l'avenir EF versions). Mais si vous ne voulez pas être contraint par la cartographie des conventions lorsque vous définissez votre modèle d'objet, votre seule option est alors l'API Fluent.
L'apprentissage de l'API Fluent est presque un must à mon humble avis, le DataAnnotations sont un nice-to-have pour les applications simples.