raízes ansiosos Carregando agregados com Entity Framework
-
13-09-2019 - |
Pergunta
Eu gostaria de criar uma abordagem mais estruturada para carregar a entidade-árvore necessários:
Eu preciso de uma séria quantidade de dados, então eu estou fazendo isso usando tipo seguro Inclui (apenas um normais incluem, mas com o Lambda) como mostrado aqui .
Como eu disse, eu preciso de um monte de dados, basicamente, uma árvore entidade inteiro sob um item pai.
Agora, eu poderia fazer isso fazendo algo como:
context.House
.Include(x => x.Doors)
.Include(x => x.Doors.FirstOrDefault().Joint)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
.Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
.Include(x => x.Windows)
// ... same thing
.Include(x => x.Roof)
// ... same thing
Como você pode ver, esta linha cheia de inclui pode ficar muito grande. Esta é de facto uma amostra muito simplificada do código real (que não inclui casas btw)
Então, o que eu gostaria de fazer é criar métodos, responsável por sua filial na árvore. Onde o método pode aceitar a consulta objeto e incluem a criança, e por sua vez, chamar os "métodos-loader criança". Além disso, o pai não deve importar, contanto que tem uma propriedade com o tipo da criança.
Isto provavelmente não faz muito sentido isso:
public void LoadHouse(int id)
{
// ...
ObjectQuery<House> query = context.House;
// and now?
LoadDoors(query, x => x.Door);
}
public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
// ... ?
LoadJoints(...)
}
E assim por diante. Mas eu realmente não posso colocar minha cabeça em torno dele ... Há um elo perdido entre a consulta de entrada e chamar os métodos de criança.
Alguém já fez algo assim? Ou alguém poderia me dar algumas dicas?
Solução
Tente algo parecido com isto em vez disso:
= consulta LoadDoors (consulta, x => x.Door);
Onde LoadX retorna o resultado da chamada Incluir.