2010-08-12 10 views
15

Bien, aquí está el escenario. Tengo 3 tablas. Uno llamado aspnet_Users uno llamado Categorías y una tabla de enlace llamada User_Categories. aspnet_Users y Categories tienen claves principales (UserId e ID respectivamente). La tabla de enlace tiene solo dos columnas: CategoryID y UserId, y hay configuración de relaciones de clave externa para cada columna Y tengo una configuración de clave única para las dos columnas en User_Categories. Esto establece una relación de muchos a muchos entre la tabla aspnet_Users y la tabla Categorías. Genere el archivo edmx de mi entidad a partir de esta configuración de base de datos, y todo se ve perfecto y funciona para casi todas las operaciones.Error de Entity Framework 4: no se puede actualizar EntitySet porque tiene un DefiningQuery

Lo que quiero hacer es agregar una nueva categoría de un formulario (que funciona perfectamente por sí mismo) y, al mismo tiempo, asociar un usuario específico con la categoría que acaba de enviar. Cuando trato de hacer esto, obtengo el error en mi línea de asunto. Aquí está el código que estoy usando para probar este (CTX es mi entidades contexto de objeto):

public ActionResult Create(Category category, Guid userId) 
{ 
    aspnet_Users user = ctx.aspnet_Users.SingleOrDefault(x => x.UserId == userId); 
    ctx.Categories.AddObject(category); 
    user.Categories.Add(category); 
    ctx.SaveChanges();; 
    return RedirectToAction("Index"); 
} 

Por qué no funciona?

Respuesta

38

supongo que el mensaje de excepción completo es algo similar a:

Unable to update the EntitySet YourTableName because it has a DefiningQuery and no InsertFunction element exists in the ModificationFunctionMapping element to support the current operation.

Esto ocurrirá si la tabla de base de datos no tiene definida una clave principal.

Agregue una clave principal a su tabla (utilizando SQL Server Management Studio o lo que sea) y actualice su modelo .edmx de la base de datos.

+1

¡¿Qué pasa si obtienes esto en una vista en lugar de una tabla! – Necronet

+1

@Necronet, lo siento, no puedo decirlo. Las vistas también pueden definir claves, ¿verdad? ¿Tiene uno definido en su punto de vista? –

+0

sí, pero EF parece estar configurando mis llaves automáticamente (y al azar también), traté de editar el dmx con el editor XML, pero cada vez que lo actualizo, vuelve a configurar la clave, no sé por qué ... – Necronet

2

Error: No se puede actualizar la EntitySet porque tiene un DefiningQuery

dos veces he conseguido este error, dos veces he buscado respuestas en todas partes, y al final mis asignaciones fue en mal estado o de la base de datos no tenía ninguna clave principal o alguna cosa. Sugiero comprobar que todo fuera ...

2

Ponga una clave primaria compuesta en la tabla de asignación, esto le indicará a EF que la maneje correctamente.

Cuestiones relacionadas