consulta com tabelas associativas - Entity Framework
21/08/2013
0
Estou iniciando no desenvolvimento com o entity e cair em uma situação com uma consulta no qual não
estou sabendo como trazer os dados. Estou desenvolvendo um menu dinâmico, no qual trara os itens a
depender do perfil do usuario. Eu possuo 5 tabelas: usuario, usuarioPerfil(Tabela associativa),
perfil, perfilFuncionalidade(Tabela associativa) e funcionalidade.
Eu preciso trazer as funcionalidade de um determinado usuario com determinado perfil.
Alguem teria alguma ideia de como posso fazer isso? Já tentei de varias maneiras e não consigo.
Junior_jaco
Posts
21/08/2013
Pjava
21/08/2013
Junior_jaco
Explicando melhor, eu passarei um usuario e o menu será montado atravez do perfil deste usuario.
21/08/2013
Joel Rodrigues
Se der, coloque a imagem em um servidor de compartilhamento e cole o link aqui.
22/08/2013
Junior_jaco
Se der, coloque a imagem em um servidor de compartilhamento e cole o link aqui.
Segue o link com o diagrama:
http://img191.imageshack.us/img191/9855/txod.jpg
23/08/2013
Matheus Caldas
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
23/08/2013
Matheus Caldas
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
23/08/2013
Junior_jaco
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
Meu velho, montando o comando SQL eu consigo, mas como eu disse no titulo, estou utilizando o entity framework, esse é o problema.
23/08/2013
Matheus Caldas
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
Meu velho, montando o comando SQL eu consigo, mas como eu disse no titulo, estou utilizando o entity framework, esse é o problema.
Desculpe,
talvez isso ajude:
public IList<funcionalidade> FindAll(usuario user) { using (SeuContexto context = new SeuContexto()) { var query = from funcionalidade f in context.funcionalidade join perfil_funcionalidade pf in context.perfil_funcionalidade on pf.cod_funcionalidade = f.cod_funcionalidade join perfil p in context.perfil on p.cod_perfil = pf.cod_perfil join usuario_perfil up in context.usuario_perfil on up.cod_perfil = p.cod_perfil join usuario u in context.usuario on u.cod_usuario = up.cod_usuario where u.cod_usuario == user.cod_usuario select f; return query.ToList().GroupBy(p => p.cod_funcionalidade).Select(g => g.First()); } }
23/08/2013
Junior_jaco
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
Meu velho, montando o comando SQL eu consigo, mas como eu disse no titulo, estou utilizando o entity framework, esse é o problema.
Desculpe,
talvez isso ajude:
public IList<funcionalidade> FindAll(usuario user) { using (SeuContexto context = new SeuContexto()) { var query = from funcionalidade f in context.funcionalidade join perfil_funcionalidade pf in context.perfil_funcionalidade on pf.cod_funcionalidade = f.cod_funcionalidade join perfil p in context.perfil on p.cod_perfil = pf.cod_perfil join usuario_perfil up in context.usuario_perfil on up.cod_perfil = p.cod_perfil join usuario u in context.usuario on u.cod_usuario = up.cod_usuario where u.cod_usuario == user.cod_usuario select f; return query.ToList().GroupBy(p => p.cod_funcionalidade).Select(g => g.First()); } }
Irei testar mais tarde e te dou uma resposta Mateus, de qualquer maneira valeu cara!
11/09/2013
Junior_jaco
Você ja tentou montar uma procedure para retornar essa consulta?
segue exemplo de um select:
select distinct f.* from funcionalidade as f inner join perfil_funcionalidade as pf on pf.cod_funcionalidade = f.cod_funcionalidade inner join perfil as p on p.cod_perfil = pf.cod_prefil inner join usuario_perfil up on up.cod_perfil = p.cod_perfil inner join usuario as u on u.cod_usuario = up.cod+usuario where u.cod_usuario = :codigo public IList<funcionalidade> All() { IList<funcionalidade> funcionalidades = new List<funcionalidade>(); using (SeuContexto context2 = new SeuContexto()) { try { if (context2.Database.Connection.State != System.Data.ConnectionState.Open) context2.Database.Connection.Open(); IDbCommand cmd = context2.Database.Connection.CreateCommand(); cmd.CommandText = "";//Aqui sua consulta IDataReader dr = cmd.ExecuteReader(); funcionalidades = popularObjeto(dr);//Aqui vc cria um metodo que le o data reader e popula o objeto; } catch (Exception ex) { } finally { context2.Database.Connection.Close(); } return list; } }
Meu velho, montando o comando SQL eu consigo, mas como eu disse no titulo, estou utilizando o entity framework, esse é o problema.
Desculpe,
talvez isso ajude:
public IList<funcionalidade> FindAll(usuario user) { using (SeuContexto context = new SeuContexto()) { var query = from funcionalidade f in context.funcionalidade join perfil_funcionalidade pf in context.perfil_funcionalidade on pf.cod_funcionalidade = f.cod_funcionalidade join perfil p in context.perfil on p.cod_perfil = pf.cod_perfil join usuario_perfil up in context.usuario_perfil on up.cod_perfil = p.cod_perfil join usuario u in context.usuario on u.cod_usuario = up.cod_usuario where u.cod_usuario == user.cod_usuario select f; return query.ToList().GroupBy(p => p.cod_funcionalidade).Select(g => g.First()); } }
Irei testar mais tarde e te dou uma resposta Mateus, de qualquer maneira valeu cara!
11/09/2013
Junior_jaco
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
Clique aqui para fazer login e interagir na Comunidade :)