Entity Framework 5: Usando carregamento lento ou carregamento ansioso
Me desculpe se minha pergunta é normal. Mas encontro esse problema ao criar meu aplicativo ASP.NET MVC 4.0 usando o Entity Framework 5.
Se eu escolher Eager Loading, simplificarei usando:
public Problem getProblemById(int id) {
using(DBEntity ctx = new DBEntity ())
{
return (Problem) ctx.Posts.Find(id);
}
}
Mas se eu usar o Eager Loading, encontrarei um problema: quando quiser navegar por todos os seus atributos, como comentários (do problema), Usuário (do problema) ... devo usar manualmenteInclude
para incluir essas propriedades. e Às vezes, se eu não usar essas propriedades, perderei o desempenho e talvez tenha perdido a força do Entity Framework.
Se eu usar o Lazy Loading. Existem duas maneiras de usarDBContext
objeto. A primeira maneira é usar o objeto DBContext localmente:
public Problem getProblemById(int id) {
DBEntity ctx = new DBEntity ();
return (Problem) ctx.Posts.Find(id);
}
Usando isso, acho que encontrará vazamento de memória, porque o ctx nunca mais será descartado.
A segunda maneira é tornar o objeto DBContext estático e usá-lo globalmente:
static DBEntity ctx = new DBEntity ();
public Problem getProblemById(int id) {
return (Problem) ctx.Posts.Find(id);
}
Eu li alguns blogs, eles dizem que, se eu usar dessa maneira, devo controlar o acesso de simultaneidade (porque a solicitação múltipla envia para o servidor) sozinha, OMG. Por exemplo, este link:
Uso do DBContext do Entity Framework
Então, como é possível projetar meu aplicativo, ajude-me a descobrir.
Obrigado :)