Usuário com melhor resposta
Como selecionar ID em relacionamento N:N

Pergunta
-
Boa noite! Tenho um relacionamento N:N entre as tabelas Contas, e Responsaveis. Preciso saber como que consigo armazenar em uma lista todos os ID's de responsaveis daquela conta. O relacionamento segue abaixo:
O código que fiz foi:
public ActionResult Edit(int id) { contas contas1 = db.contas.Single(c=> c.IdContas == id); var ListaIdsResponsaveis = db.contas.Include("responsavelporconta").Single(c => c.IdContas == id); }
Respostas
-
O Find pertence ao DbSet, portanto você só conseguirá usar se 'contas' for um DbSet..
Se o 'contas' for um ObjectSet, então você terá que usar o Single(o => o.Id == id).
Tenta:
var ListaIdsResponsaveis = db.contas .Include("responsavelporconta") .Single(c => c.IdContas == id) .Responsaveis .Select(r => r.id) .ToList();
http://www.linkedin.com/pub/murilo-kunze/44/191/455
- Editado Murilo Kunze terça-feira, 9 de outubro de 2012 16:41
- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:54
-
Eu também não. Pesquisei e parece que não mesmo. A saída é usar o SingleOrDefault().
var responsaveis = db.Contas.SingleOrDefault(c=>c.Id == SEU_ID).Responsaveis.ToList();
O EDMX é algo muito questionado no Entity Framework. O código que ele gera é um pouco confuso e difícil de extender,
Eu aconselho usar Code First, tem alguns vídeos que mostro isso:
http://andrebaltieri.net/2012/04/09/criando-um-catlogo-de-produtos-com-asp-net-mvc-e-entity-framework-pt-1/Outra saída é gerar as classes do banco usando o EF Power Tools
http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power-tools-ctp1-released.aspxAbraços,
André Baltieri
MTAC – Microsoft Technical Audience Contributor
Twitter: @andrebaltieri
Blog: http://andrebaltieri.net- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:53
-
Só uma observação. Use SingleOrDefault se você tiver certeza que vai retornar apenas 1 elemento pois se retornar mais de um vai da erro no seu código. Pra evitar isso sempre uso FirstOrDefault.
1000ton Analista de Sistema Plastripel - Barretos @MiltonFilho
- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:53
Todas as Respostas
-
kakashi,
Na entidade responsáveis você tem uma lista de contas, e na de contas uma lista de responsáveis
Para saber os responsáveis de uma conta, você pode fazer o seguinte
var responsaveis = db.Contas.Find(ID_CONTA).Responsaveis.ToList();
O mesmo serve para saber as contas do responsável.
Abraços,
André Baltieri
MTAC – Microsoft Technical Audience Contributor
Twitter: @andrebaltieri
Blog: http://andrebaltieri.net- Sugerido como Resposta Murilo Kunze terça-feira, 9 de outubro de 2012 11:30
-
-
-
-
O Find pertence ao DbSet, portanto você só conseguirá usar se 'contas' for um DbSet..
Se o 'contas' for um ObjectSet, então você terá que usar o Single(o => o.Id == id).
Tenta:
var ListaIdsResponsaveis = db.contas .Include("responsavelporconta") .Single(c => c.IdContas == id) .Responsaveis .Select(r => r.id) .ToList();
http://www.linkedin.com/pub/murilo-kunze/44/191/455
- Editado Murilo Kunze terça-feira, 9 de outubro de 2012 16:41
- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:54
-
-
Outra coisa, se você usar o Single e não existir um objeto com o Id mencionado, vai gerar um erro, caso use o SingleOrDefault se não existir o objeto o resultado é nulo.
Abraços,
André Baltieri
MTAC – Microsoft Technical Audience Contributor
Twitter: @andrebaltieri
Blog: http://andrebaltieri.net -
-
Eu também não. Pesquisei e parece que não mesmo. A saída é usar o SingleOrDefault().
var responsaveis = db.Contas.SingleOrDefault(c=>c.Id == SEU_ID).Responsaveis.ToList();
O EDMX é algo muito questionado no Entity Framework. O código que ele gera é um pouco confuso e difícil de extender,
Eu aconselho usar Code First, tem alguns vídeos que mostro isso:
http://andrebaltieri.net/2012/04/09/criando-um-catlogo-de-produtos-com-asp-net-mvc-e-entity-framework-pt-1/Outra saída é gerar as classes do banco usando o EF Power Tools
http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power-tools-ctp1-released.aspxAbraços,
André Baltieri
MTAC – Microsoft Technical Audience Contributor
Twitter: @andrebaltieri
Blog: http://andrebaltieri.net- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:53
-
Só uma observação. Use SingleOrDefault se você tiver certeza que vai retornar apenas 1 elemento pois se retornar mais de um vai da erro no seu código. Pra evitar isso sempre uso FirstOrDefault.
1000ton Analista de Sistema Plastripel - Barretos @MiltonFilho
- Marcado como Resposta Kakashi963 segunda-feira, 15 de outubro de 2012 12:53
-
Milton,
Como neste caso a busca é pelo Id (Espero que seja único) ele não retorna mais que 1 resultado.
Abraços,
Se sua questão foi respondida, favor marcar.
André Baltieri
MTAC – Microsoft Technical Audience Contributor
Twitter: @andrebaltieri
Blog: http://andrebaltieri.net
Site: http://sismat.com.br -