Usuário com melhor resposta
EF4. Sempre carrega toda a tabela...

Pergunta
-
Estou com alguns problemas em relação ao LazyLoading.
Por exemplo: Usuario.Posts.Count().
Pra fazer este Count o EF4 faz um select de todos os Posts do Usuario primeiro. Isso é um absurdo, não tem como usar em uma aplicação real.
Isso também causa uma outra consequencia. Quando você adiciona um Post pro Usuario, o AssociationFixUp referencia os Posts dele, nisso o EF4 também carrega todos os posts.
Outros ex.:
Usuario.Posts.First()
Usuario.Posts.Count(x => x.Ativo)
http://blog.fujiy.net/ - MCPD em .Net 2.0
Respostas
-
Parece que não da pra fazer desta forma mesmo.
O que estou fazendo agora é desativar o Lazy e uso a classe de Contexto do EF4 direto nos controllers.
Ficou mais rapido, só seleciono as colunas que preciso.
E Mais simples. Nao preciso ficar criando repositorio que em geral era sempre um trabalho repetitivo e duplicado.
http://blog.fujiy.net/ - MCPD em .Net 2.0- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 16:23
Todas as Respostas
-
Olá, você não pode desabilitar o Lazy Loading e utilizar Explicit Loaging ou Eager Loading?
Explicit Loading, ou carregamento explicito, você especifica através do metódo Load quando uma entidade será carregada, é util quando você deve recuperar uma entidade e a associação em momentos distintos, visto que o carregamento da entidade e da associação serão traduzidas em duas consultas ao banco de dados:
if(!Usuario.Posts.IsLoaded)
{
Usuario.Posts.Load();}
Quanto ao Eager Loading, ou carregamento ansioso, é um metodo interessante pois carrega a entidade e a associação em um mesmo momento gerando somente uma consulta ao banco de dados:
Usuario user = (from u in context.Usuario.Include("Posts")
select u).FirstOrDefault();
O interessante nestes dois metodos para o seu caso é que você pode especificar quando uma entidade será carregada, diferentemente do Lazy Loading que carrega a associação sempre que a propriedade de navegação for acessada.
Att
Se o post foi útil marque como resposta. - Advanced Web Application - MCP- Sugerido como Resposta AndreAlvesLimaModerator domingo, 23 de maio de 2010 15:54
- Não Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 13:48
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 13:48
-
O problema é que estou fazendo tudo bem separado. A camada de apresentação, no caso MVC, não tem como carregar estes dados. Eu precisaria criar um método na camada de dados pra cada conjunto de propriedades que eu desejasse
http://blog.fujiy.net/ - MCPD em .Net 2.0 -
Felipe,
Conseguiu solucionar sua questão?
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Parece que não da pra fazer desta forma mesmo.
O que estou fazendo agora é desativar o Lazy e uso a classe de Contexto do EF4 direto nos controllers.
Ficou mais rapido, só seleciono as colunas que preciso.
E Mais simples. Nao preciso ficar criando repositorio que em geral era sempre um trabalho repetitivo e duplicado.
http://blog.fujiy.net/ - MCPD em .Net 2.0- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 16:23