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?

Foi útil?

Solução

Tente algo parecido com isto em vez disso:

= consulta LoadDoors (consulta, x => x.Door);

Onde LoadX retorna o resultado da chamada Incluir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top