2012-06-19 30 views
6

He leído several artículos y questions sobre el concepto de clave externa frente a relación independiente cuando se utiliza Entity Framework. Y todavía no estoy 100% seguro de qué camino tomar ... Preferiría no "contaminar" mis POCO de dominio al tener una propiedad que se utilizará en la relación FK cuando ya tengo una referencia de propiedad para "ha un "objeto".Relaciones de clave externa frente a relaciones independientes: ¿hay alguna mejora con Entity Framework 5?

Mis preguntas son (mirarte @EFTeam, @Ladislav Mrnka)

  1. ¿existen mejoras sobre este tema en la próxima Entidad v5 Marco?
  2. ¿Hay más ventajas si utilizo FK en lugar de asociaciones independientes (particularmente con el código primero)?

Respuesta

5

Si tiene un modelo grande, está obligado a "contaminar" sus objetos de dominio (o modelo conceptual en general) de todos modos. Para los modelos con asociaciones mapeadas FK, el costo de "generación de vista" - una etapa en la línea de procesamiento de EF necesaria para ejecutar consultas o guardar cambios, que se puede mover al tiempo de construcción ("vistas pregeneradas") es menor en comparación con los modelos con asociaciones independientes. Esto es importante porque la cantidad de tiempo para llevarlo a cabo puede ser imperceptible para los modelos pequeños, pero se hace más rápido muy rápido, especialmente cuando hay asociaciones mapeadas a claves externas con nulos (to-0..1, o to-1 con entidades derivadas en jerarquías mapeadas TPH). En el documento oficial EF5 performance considerations document, se da un ejemplo de diferencia en el tiempo de generación de la vista para un modelo muy grande entre "más de un mes y luego nos damos por vencidos" (con asociaciones independientes) y 104 minutos (con asociaciones asignadas a FK). En mi caso (varios cientos de entidades altamente conectadas) es de entre 25 minutos y 40 segundos. La situación es la misma en EF5 que en las versiones anteriores.

+0

También tengo un modelo muy grande (más de 75 entidades). Parece que el uso de las relaciones FK se recomienda entonces? – zam6ak

+0

Si todavía no está viendo problemas de rendimiento (específicamente, espera mucho en el primer '.SaveChanges' y un ligero retraso en la primera consulta para acceder a un conjunto de entidades determinado) no necesita usar FK, si le gustan las asociaciones independientes del código limpiador da más. – cynic

2

No hay mejoras. Ambas opciones todavía existen. La ventaja de utilizar la asociación FK es el manejo simplificado de los cambios en la relación uno a muchos al trabajar con gráficos de objetos desconectados. También debería simplificar el enlace de datos si lo usa.

+1

Parece que las relaciones FK proporcionan más ventajas a costa de la "contaminación" de las POCO de dominio ... ¿Puede explicar "También debería simplificar el enlace de datos si lo usa". ¿Qué quisiste decir con eso? ¿Hay algún ejemplo (soy una persona "visual")? Gracias – zam6ak

Cuestiones relacionadas