2011-07-01 6 views
8

¿Devuelve la estructura de entidad la misma referencia de objeto si consulto el mismo objeto "lógicamente" (en la base de datos) desde diferentes lugares.Referencias de objeto de infraestructura de entidad iguales para los mismos objetos de base de datos

Por ejemplo, me preguntó al cliente con el nombre de Joe Negro, (y asumir por ahora sé que sólo hay un Joe Negro en la base de datos.) Customer c = select ... blabla where ... Name == Joe Black...; y en algún otro sitio en el código, me preguntó Customer c2 = select... where.. ID==5 donde 5 es la Identificación de Joe Black. Sé que en la base de datos se asignan al mismo objeto, pero ¿también se asignan al mismo objeto en el nivel del código? Entonces, ¿c1 es igual a c2? Tengo listas para fusionar y verificar la igualdad lógica de los objetos (no puedo acceder a la base de datos por el momento) y me preguntaba si los objetos de Entity Framework funcionarían bien con él o si debería escribir mis clases comparer personalizadas.

Respuesta

13

La mayoría de los ORM, incluidos Entity Framework y NHibernate, usan el Identity Map Pattern para garantizar que solo haya una instancia de una entidad determinada por clave principal. El contexto abarca el mapa de identidad, por lo que dos contextos diferentes crearán dos objetos que se refieren a la misma entidad. Es una buena práctica que las entidades implementen IEquatable, incluidas las anulaciones para operadores de igualdad para que '==' o '! =' Funcionen. Esto es más complicado de lo que uno podría pensar. Eche un vistazo a here para ver un ejemplo.

+0

Eso respondió por pregunta, gracias. Por lo tanto, significa que mi trabajo es más fácil, pero no sé cómo agregar métodos de implementación o sobrecargar operadores para Entity Framework: clases generadas automáticamente. De todos modos, obtuve acceso a mi DB nuevamente y funcionó. Entonces EF maneja eso también. –

Cuestiones relacionadas