2011-05-06 18 views
7

¿Hay alguna manera de que podamos obtener la "tabla de muchos a muchos" subyacente uniendo las dos entidades en el marco de la entidad.Cómo obtener el mapeo Entity to Table para muchas o muchas relaciones desde el metamodelo en Enity Framework

Por ejemplo, si tenemos entidades de productos y pedidos, ¿cómo podemos obtener la tabla de conjunción subyacente Product_Order que se une a la tabla Producto y orden?

Cualquier ayuda sería apreciada.

+0

¿Por qué te Necesitará eso, hará que la interacción con objetos sea mucho más compleja. EF por defecto oculta estas tablas de unión puras por la relación correcta de muchos a muchos. –

+0

@Ladislav: gracias por la respuesta rápida. En realidad, tengo que hacer un poco de lógica comercial en la tabla de muchos a muchos. Y lo estoy haciendo por o verlling the: public int Método SaveChanges (SaveOptions options) de ObjectContext. De alguna forma podemos obtener este nombre de tabla al igual que obtenemos un nombre de tabla para una entidad que usa el método ToTraceString(). mira esto: http://stackoverflow.com/questions/1895455/ – Baig

+0

una tabla de unión pura no es una entidad comercial, sino simplemente una forma de expresar una relación 'muchos a muchos 'en SQL (es por eso que EF lo oculta) . Por lo tanto, 'hacer lógica de negocios en esta tabla' no tiene sentido. Tal vez podría describir su escenario con más detalle, y podría haber una mejor solución para su problema. – Yakimych

Respuesta

9

Es posible exponer tabla de unión como una entidad pero no es común/necesario:

  • Va a empezar con esto:

enter image description here

  • Eliminar muchos- relación de muchos a Product y Order entidades
  • Crea Te New ProductOrder entidad en el diseñador (ya sea mediante el uso de la caja de herramientas o el menú contextual)
  • definir dos propiedades en su nueva entidad correspondiente a claves externas definidas en su tabla de unión - ProductId, OrderId - asegúrese de que ambas están marcadas como clave de entidad (que debe ser clave primaria compuesta en la base de datos) y tienen el mismo tipo que PK
  • detalles Abrir Mapeo y el mapa de su nueva entidad a la tabla de unión

enter image description here

  • Crea dos nuevas asociaciones de uno a muchos. El frist entre Product y ProductOrder y el segundo entre Order y ProductOrder.
  • En la ventana de la propiedad de cada relación añadido establecieron restricciones de referencia (as described also here).

enter image description here

hay posibilidad muy grande de que si necesita este que está haciendo algo mal.

+2

Gran respuesta. Como nota al margen: una solución rápida pero más sucia sería agregar una columna "ficticia" a la tabla de unión (por ejemplo, 'Id' como identidad). Sería expuesto por EF como una entidad en ese caso. – Yakimych

+0

gracias por su asistencia oportuna. – Baig

+0

@Ladislav, No estoy seguro de por qué diría: "Hay muchas posibilidades de que, si lo necesita, esté haciendo algo mal". ya que es una ocurrencia muy común cuando sea necesario agregar un atributo a la relación. Puede crear una relación muchos a muchos entre hogares y personas, por ejemplo, pero deberá hacer esto para agregar una fecha de compra o cualquier otra cosa que pertenezca a la relación en lugar de una entidad principal. – spadelives

Cuestiones relacionadas