Fórum consulta com tabelas associativas - Entity Framework #452812
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
Curtir tópico
+ 0Posts
21/08/2013
Pjava
Gostei + 0
21/08/2013
Junior_jaco
Explicando melhor, eu passarei um usuario e o menu será montado atravez do perfil deste usuario.
Gostei + 0
21/08/2013
Joel Rodrigues
Se der, coloque a imagem em um servidor de compartilhamento e cole o link aqui.
Gostei + 0
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
Gostei + 0
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;
}
}
Gostei + 0
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;
}
}
Gostei + 0
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.
Gostei + 0
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());
}
}
Gostei + 0
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!
Gostei + 0
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!
Gostei + 0
11/09/2013
Junior_jaco
Gostei + 0
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
Gostei + 0
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
Gostei + 0
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
Gostei + 0
11/09/2013
Matheus Caldas
como vc esta fazendo o mapeamento das suas entidades?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)