6

vi este comentario en MSDN (link y link):EF4 Asociaciones independientes: ¿por qué evitarlas?

"Tenga en cuenta que las asociaciones independientes a menudo se debe evitar ya que las cosas como n niveles y la concurrencia se hace más difícil."

Soy nuevo en EF4 y estoy construyendo una aplicación web n-Tier. Esto suena como una trampa importante. ¿Puede alguien explicarme qué significa esto?

Respuesta

7

Creo que es una preferencia personal. Originalmente, EF se creó para usar solo indep. asociaciones y alineado con un enfoque de ERM más clásico. Sin embargo, la mayoría de nosotros, los desarrolladores, somos tan dependientes de los FK que hicieron la vida muy compleja. Así que MS nos dio FK en EF4 lo que significaba no solo tener el FK como una propiedad en la entidad dependiente, sino que las relaciones se definen a través de restricciones en el modelo conceptual en lugar de enterrarse en las asignaciones. Todavía hay algunas relaciones que solo puede definir con una asociación indep: muchas a muchas claves externas exclusivas. Tenga en cuenta que si planea usar los Servicios de RIA (no suena como tal) que RIA solo reconoce las asociaciones de FK.

Así que si prefiere aprovechar las asociaciones independientes, todavía puede usarlas en EF4. Ellos son totalmente compatibles. Pero como James sugiere, hay algunas trampas más a tener en cuenta ... cosas que tendrás que hacer más explícitamente debido a la forma en que EF trabaja especialmente con los gráficos. O ese caso en el que simplemente desea ese FK, por ejemplo, tiene la identificación de un cliente pero no tiene la instancia. Podrías crear un pedido, pero sin esa buena propiedad CustomerID FK, tienes que hacer algunos malabares adicionales para conseguir ese CustomerID allí.

hth

3

Si eres nuevo en EF y empiezas con EF4, la respuesta fácil es ignorar esto: es casi seguro que uses Asociaciones de claves extranjeras en lugar de Asociaciones independientes.

Una Foreign Key Association está respaldada por una relación de clave externa en la base de datos y esta relación se describe explícitamente en el modelo conceptual. Este tipo de asociación es nueva para EF4 y entiendo que es una concesión que sigue los problemas que la gente tenía con las Asociaciones Independientes.

Estrictamente si desea separar el esquema de almacenamiento y el esquema conceptual (que es el punto de EF) no le gustaría que su esquema conceptual sepa cosas como claves externas, ya que son una base de datos (es decir, almacenamiento) concepto. Las versiones anteriores de EF seguían este enfoque y tenemos esta cosa llamada Asociación Independiente.

Piense en Asociaciones independientes como asociaciones a las que EF rastrea sin el conocimiento de la clave externa subyacente. EF todavía lo admite, pero tienen debilidades importantes.

EF4 en VS2010 utilizará sus claves externas y creará relaciones de clave externa a menos que usted indique lo contrario. En general, funcionan como cabría esperar. Todavía hay algunos inconvenientes, p. alrededor de eliminaciones en cascada.

Si quieres aprender EF - puedo recomendar este libro:

http://learnentityframework.com/learnentityframework/

Todo lo que quiere saber, se explica muy claramente.

+1

Okeedoke. ¿Pero cuáles son específicamente los problemas causados ​​con n-tier y concurrencia? – anon

+0

Bueno, la principal diferencia que no es la diferencia de esquema es que una entidad con una asociación independiente no expone la clave externa en la capa conceptual. La asociación se mantiene en un objeto separado. Dependiendo de cómo diseñe su aplicación, es más complejo pasar esta información adicional entre capas. Las asociaciones de claves foráneas son mucho más fáciles de trabajar, ya que puede simplemente establecer la clave externa directamente en la entidad o modificar el conjunto de entidades/entidades relacionadas expuestas. –

+0

"Menos fácil de trabajar" en mi mente no se traduce necesariamente en "evitar". Este último sugiere que hay trampas específicas. ¿Hay algún artículo sobre estas trampas? (Tengo el libro de Julia Lerman, BTW.) – anon

Cuestiones relacionadas