entity-framework - foreign - fluent api entity framework
Primero el código: ¿Son mejores las anotaciones de datos o la API Fluent? (1)
Solo me pregunto ¿cuál es una mejor forma de configurar mi modelo?
Me gusta la API Fluent porque mis POCO no están llenos de atributos específicos de EF.
¿Hay algo que no puedas hacer con la API Fluent que puedas con atributos?
Todo lo que puede configurar con DataAnnotations también es posible con la API Fluent. Lo opuesto no es verdad. Entonces, desde el punto de vista de las opciones de configuración y flexibilidad, la API de Fluent es "mejor".
Ejemplos de configuración (por supuesto, no una lista completa) que son posibles en la API Fluent pero no con DataAnnotations (hasta donde puedo ver):
Desactivar eliminaciones en cascada:
.WillCascadeOnDelete(false)
Especifique el nombre de la columna de la clave externa en la base de datos cuando la clave no esté expuesta en su modelo de objetos:
.Map(conf => conf.MapKey("MyForeignKeyID"))
Ajuste fino granular de las relaciones, especialmente en todos los casos en que solo un lado de una asociación está expuesto en el modelo de objetos:
.WithMany(...)
,WithOptional(...)
,WithRequiredDependent(...)
,WithRequiredPrincipal(...)
Especificación de la asignación de herencia entre el modelo de objeto y las tablas de la base de datos (Tabla por jerarquía, tabla por tipo, tabla por clase de concreto):
.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)
Editar: Microsoft considera que la API Fluent es una "característica avanzada" (Cita desde here ):
La API fluida se considera una función más avanzada y recomendamos utilizar Anotaciones de datos a menos que sus requisitos requieran el uso de la API fluida.
Pero, en mi opinión, se alcanzan las limitaciones de DataAnnotaciones muy rápidamente (excepto quizás para modelos de objetos extremadamente simples). Si ya no puede ajustar su modelo con DataAnnotations, su último recurso es seguir las convenciones de mapeo predeterminadas (nombrando sus propiedades de acuerdo con esas reglas). Actualmente no puede sobreescribir las convenciones (solo deshabilitarlas; MS anunció que dará opciones de configuración para las convenciones en futuras versiones de EF). Pero si no quiere verse forzado por las convenciones de mapeo cuando define su modelo de objetos, su única opción es la API Fluent.
Aprender la API de Fluent es casi un Imprescindible, las Anotaciones de Datos son agradables para aplicaciones simples.