Soy nuevo en Entity Framework y estoy tratando de resolver las cosas. Tengo una base de datos creada que no es muy complicada. Hay alrededor de 7 tablas y 3 de ellas son tablas de asignación para asociar un registro de tabla con otro. El ejemplo que estoy usando aquí es la siguiente:Usando Entity Framework, ¿cómo puedo reflejar una relación de muchos a muchos y agregar entidades que existen a una nueva entidad que se está creando?
tabla de usuarios
- UserId
- Nombre de usuario
Tabla papel
- RoleId
- NombreRol
Tabla: UserRole
- UserId
- RoleId
Las claves externas se asignan en mi base de datos. Cuando creo un nuevo Modelo de Entidad dentro de VS 2008, el diagrama parece tener las relaciones correctas, pero no crea una tabla para la tabla UserRole. La relación se mapea como muchos a muchos entre el rol de usuario &.
Mi problema es que puedo crear nuevos usuarios y puedo crear nuevos roles, pero no puedo encontrar la manera de crear un nuevo usuario con un rol existente. Además, la tabla UserRole probablemente no esté asignada correctamente dentro del modelo para empezar. Aquí está mi código hasta ahora:
ObjectQuery<Role> roles = context.Roles;
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First();
User user = new User
{
DisplayName = "TestCreate2",
Email = "[email protected]",
Password = "test"
};
context.AttachTo("Roles", role);
user.Roles.Add(role);
context.AddToUsers(user);
context.SaveChanges();
aquí es el error que estoy recibiendo:
No se puede actualizar 'UserRoles' la EntitySet porque tiene un DefiningQuery y no existe ningún elemento en el elemento para soportar la corriente operación.
Aquí es el XML que se refiere a la tabla UserRole:
<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles">
<DefiningQuery>SELECT
[UserRoles].[Role_id] AS [Role_id],
[UserRoles].[User_id] AS [User_id]
FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery>
</EntitySet>
Fue tirar los dientes sólo para averiguar cómo consultar el contexto de tal manera que me dio una entidad papel real. Estoy seguro de que el problema tiene que ver con cómo se mapea UserRole, pero recién estoy comenzando aquí y no tengo ni idea de dónde podría haber salido mal.
Y realmente he buscado en google & este sitio, pero supongo que no he encontrado los parámetros de búsqueda adecuados para encontrar una pregunta que me ayude a solucionarlo. Encontré una pregunta que decía que EF tiene problemas con esto, pero si la tabla de asignación hace que ambas columnas sean una clave principal, se resuelve solo. No estoy seguro de cómo hacer eso. ¿Se hace esto en la base de datos (usando SQL SERVER 2005 EXPRESS) o en la asignación? Este es un proyecto personal, así que puedo publicar más detalles sobre el código o xml si es necesario. Cualquier y toda ayuda será apreciada.
¡Eso fue todo! Simplemente no sabía cómo asignar 2 claves principales. Resaltando las dos filas trabajadas. ¡Gracias! – jason
No hay problema, me alegro de poder ayudar. – markt