Eager Loading em itens monitorados?
Pergunta
Eu tenho um elemento ligado a uma entidade (Contato) que expõe algumas propriedades de navegação.
eu quero, que em alguma ação (ou seja, um "Carregar crianças" botão), o contato deve carregar para todos os seus filhos e netos como eu posso fazer com um ObjectQuery.Include antes da execução; exemplo (pseudo):
DirectCast(element.DataContext, Contact).SubContacts. _
Include("Address.State"). _
Load()
Eu quero ser capaz de moldar os resultados também recarregando itens como o exemplo acima, não apenas ao consultar o próprio modelo.
Eu acho que isso deveria ter sido uma parte da Entidade-Quadro de alguma forma.
Solução
Eu não sou positivo que eu siga a pergunta, mas deixe-me ver:
Você quer ter uma entidade que já carregado, em seguida, carregar uma propriedade de navegação com incluir caminhos para essa propriedade. Esta não é realmente tão difícil, desde que você está usando o mesmo contexto que você usou para carregar o primeiro objeto.
O ponto importante é que sempre que você faz uma consulta que retorna uma entidade, Entity Framework vai ligá-lo automaticamente com qualquer um de seus objetos relacionados que você já tem. Então, o que você realmente quer é produzir uma nova consulta que retorna os dados extra, com alguns inclui.
Todas as referências feitas Entity Framework tem um método chamado CreateSourceQuery . Ele retorna um objeto de consulta, de modo que você pode usá-lo para fazer isso (desculpe, C #):
AlreadyLoadedContact.SubContacts.CreateSourceQuery().Include("Address.State").ToList();
A chamada ToList executa a consulta, e Entity Framework vai levar todos os resultados e adicioná-los automaticamente para você SubContacts EntityCollection.