none
Construir ModelBuilder de 4 tablas hacia 1 RRS feed

  • Pregunta

  • Buenos días. Tengo un problema y no se como resolverlo.

    Tengo en base de datos 4 tablas :

    • Usuario (ID,...)
    • Grupo(ID,...)
    • Rol(ID,...)
    • Permiso(ID,...)

    Y una cuarta tabla que me une estas cuatro:

    • UsuarioRolPermiso(ID_usuaro,ID_grupo,ID_rol,ID_permiso)

    Estas 4 columnas forman la PrimaryKey donde cada columna es ForeingKey de alguna de las otras.

    En mi proyecto tengo creada una clase por cada una de las tablas anteriores (pero no de UsuarioRolPermiso) y necesito incluir en el contexto, en el modelBuilder, la relacion de las 4 con UsuarioRolPermiso.

    Pense en definir en cada una de las clases una colección hacia las otras tres pero no me funciona. ¿Que necesito incluir en las clases y en el modelBuilder para poder obtener despues con Linq toda la relación a partir de los usuarios sin tener que definir una clase para la tabla UsuarioRolPermiso?

    Espero me podais ayudar porque es urgente y ya he consumido casi todo el tiempo que tenia para investigar esto.

    Un saludo y gracias a todos.


    • Editado DiabloJr lunes, 25 de abril de 2016 11:16
    lunes, 25 de abril de 2016 11:15

Todas las respuestas

  • Hola,

    Tienes que decirle al modelbuilder que relación tienen entre ellas, te dejo un ejemplo para que te guíes:

    1. primero definición de las clases entity

    public class Usuario {

    //Todas sus propiedades aqui

    public List<UsuarioRolPermiso> ListaUsuarioRolPermiso {get;set;} //relación con tabla UsuarioRolPermiso

    }

    public class Grupo {

    //Todas sus propiedades aqui

    public List<UsuarioRolPermiso> ListaUsuarioRolPermiso {get;set;} //relación con tabla UsuarioRolPermiso

    }

    public class Rol {

    //Todas sus propiedades aqui

    public List<UsuarioRolPermiso> ListaUsuarioRolPermiso {get;set;} //relación con tabla UsuarioRolPermiso

    }

    public class Permiso {

    //Todas sus propiedades aqui

    public List<UsuarioRolPermiso> ListaUsuarioRolPermiso {get;set;} //relación con tabla UsuarioRolPermiso

    }

    //Aqui la clase de la tabla intermedia

    public class UsuarioRolPermiso {

    //Todas sus propiedades aqui

    //estas son las relaciones a las demas tablas

    public Usuario oUsuario {get;set;} 

    public Usuario oGrupo {get;set;}

    public Usuario oRol {get;set;}

    public Usuario oPermiso {get;set;}

    }

    2. Esta es la configuración de las relaciones del modelbuilder

    modelBuilder.Entity<Usuario>()
                            .HasMany(x => x.ListaUsuarioRolPermiso)
                            .WithRequired(x => x.oUsuario)
                            .HasForeignKey(x => x.IdUsuario); //la propiedad del campo foraneo

    modelBuilder.Entity<Grupo>()
                            .HasMany(x => x.ListaUsuarioRolPermiso)
                            .WithRequired(x => x.oGrupo)
                            .HasForeignKey(x => x.IdGrupo); //la propiedad del campo foraneo

    modelBuilder.Entity<Permiso>()
                            .HasMany(x => x.ListaUsuarioRolPermiso)
                            .WithRequired(x => x.oPermiso)
                            .HasForeignKey(x => x.IdPermiso); //la propiedad del campo foraneo

    modelBuilder.Entity<Rol>()
                            .HasMany(x => x.ListaUsuarioRolPermiso)
                            .WithRequired(x => x.oRol)
                            .HasForeignKey(x => x.IdRol); //la propiedad del campo foraneo

    Espero sea de tu ayuda.

    Cualquier cosa comentas.

    viernes, 15 de julio de 2016 15:18