Estoy utilizando el marco de entidad y el modelado de una relación muchos a muchos.¿Es posible hacer referencia directa a una tabla de muchos a muchos utilizando el marco de entidades, primero el código
He creado la relación entre las dos entidades que utilizan la API de fluidez (digamos usuarios y grupos):
this.HasMany(t => t.Users)
.WithMany(t => t.Groups)
.Map(
m =>
{
m.ToTable("GroupMembers");
m.MapLeftKey("Group_Id");
m.MapRightKey("User_Id");
});
Esto funciona muy bien, pero me gustaría también poder hacer referencia a la tabla GroupMembers directamente. Para hacer eso, tengo algo como:
[Table("GroupMembers")]
public class GroupMember
{
#region Properties
/// <summary>
/// Gets or sets the group.
/// </summary>
public virtual Group Group { get; set; }
/// <summary>
/// Gets or sets the Id of rht group.
/// </summary>
[Key]
[Column("Group_Id", Order = 1)]
public int GroupId { get; set; }
/// <summary>
/// Gets or sets the user.
/// </summary>
public virtual User User { get; set; }
/// <summary>
/// Gets or sets the Id of the user.
/// </summary>
[Key]
[Column("User_Id", Order = 2)]
public int UserId { get; set; }
#endregion
}
Sin embargo, voy a tener el siguiente error durante la inicialización del DbContext:
esquema especificado no es válido. Errores: (381,6): error 0019: EntitySet 'GroupUser' con esquema 'dbo' y tabla 'GroupMembers' era ya definido. Cada EntitySet debe hacer referencia a un esquema exclusivo y a la tabla .
Creo que esto se debe a que el marco de entidad no se da cuenta de que la tabla GroupMembers especificada en la API fluida y la tabla de entidades GroupMembers son en realidad una en la misma. En otras palabras, si elimino el código API fluido que describe la relación muchos a muchos, entonces puedo inicializar el DbContext.
¿Puedo tener una tabla de muchos a muchos a la que también puedo hacer referencia directamente?
Gracias. Tanto el Usuario como el Grupo heredan de una tabla base, Principal, y hay otra tabla, Permisos, que contiene permisos para usuarios y grupos. La consulta LINQ para eso se parece a: desde p en contexto.Permisos unir m en context.GroupMembers en p.PrincipalId es igual a m.GroupId donde m.UserId.Equals (principalId) seleccionar p No estoy muy seguro de cómo realizar esa consulta sin hacer referencia directa a la tabla GroupMembers. – Eric
@Eric: recomendaría crear una pregunta separada para esto con más detalles sobre el modelo. – Slauma
@Eric Tengo absolutamente el mismo problema, parece ilógico que una API fluida solo pueda crear entidades en lugar de usar las ya existentes – Lu4