2009-07-24 22 views
7

Estoy jugando con Entity Framework para un proyecto POC. En mi base de datos tengoEntity Framework Muchos a muchos CRUD

Category<-------CategoryProduct ------->Product

(Cuando la tabla de unión es una entidad en el modelo.)

¿Cómo puedo hacer seleccione/inserción/actualización o elimino en esto?

Respuesta

13

Asumiendo la tabla CategoryProduct, únicamente se hace de dos FKs uno a uno a Product y Category ... que el FAN por defecto no producirá una entidad CategoryProduct, en lugar de manipular esa mesa tendrá que crear/eliminar relaciones usando Product.Categories o Category.Products colecciones.

I.e. para añadir una fila:

product.Categories.Add(category); // or category.Products.Add(product); 

Para eliminar una fila:

product.Categories.Remove(category); // or visa versa 

para consultar la tabla es decir, para obtener las filas de esa tabla:

var pc = from c in ctx.Categories 
     from p in c.Products 
     select new {CategoryID = c.ID, ProductID = p.ID}; 

y actualizar no lo hace sentido, porque el PK (que no puede cambiar) es todas las columnas, es decir, ninguna de las columnas de la fila se puede actualizar, por lo que la fila en sí misma no se puede actualizar (excluyendo las eliminaciones, por supuesto).

Esperanza esto ayuda

Alex James

+0

Gracias Alex. Pero, ¿cómo puedo finalizar las columnas de un producto? Recibo este error: Un objeto de entidad no puede ser referenciado por varias instancias de IEntityChangeTracker. El código es: public int actualización estática (Producto C) { usando (SimvideoEntities ctx = new SimvideoEntities()) { ctx.Attach (c); Common.SetModified (ctx, c); return ctx.SaveChanges (true); } } – Shuaib

+0

Ok, obtuve la actualización y eliminé el trabajo pero primero tengo que obtener el registro del contexto y luego guardarlo/eliminarlo. – Shuaib

+1

Gracias Alex que ayudó mucho.Sigan con el buen trabajo. – Shuaib

1

Hay dos maneras, por lo menos dos que se me ocurren:

  1. Cuenta con una instancia de cada objeto, esto es desagradable y es, como de costumbre difícil de conseguir el cableado correcto.
  2. Edite el modelo de modo que modele la relación de muchos a muchos como de muchos a muchos y luego hará todo por usted.

La opción 2 es la mejor manera, pero actualmente tiene la limitación de que si tiene otros datos asociados con CategoryProduct, no funciona.

+0

Gracias. Eso es lo que hice. Se eliminó la clase media. Entonces, en el modelo, es de muchos a muchos y el producto de categoría ya no está. – Shuaib

Cuestiones relacionadas