Usando um procedimento armazenado na estrutura de entidade, como faço para obter a entidade a ter suas propriedades de navegação povoada?

StackOverflow https://stackoverflow.com/questions/1035677

Pergunta

quadro Entidade é cripplingly lento então eu tentei usar um procedimento armazenado, mas eu corri para este problema.

Entity Framework permite que você defina um procedimento armazenado que produz uma entidade. No entanto a minha entidade tem 'propriedades de navegação' que não estão sendo preenchidos quando se utiliza este método.

Existe um trabalho em torno?

Foi útil?

Solução

Procedimentos bem armazenados não são combináveis. Portanto, não há maneira de chamar a sua SPROC e ter a EF automaticamente relacionamentos Preencher na mesma consulta, usando include () ou algo assim.

Então, dizer que você tem produtos e categorias

e você tem um sproc para obter os produtos:

i.

var products = context.GetProducts(someproductfilter);

os produtos resultantes não terão suas categorias carregado.

No entanto, se você tem um segundo procedimento armazenado que recebe as categorias para esses produtos:

i.

var categories = context.GetCategoriesForProducts(someproductfilter);

uma característica em EF chamado correção relacionamento, que liga entidades relacionadas uma vez que a segunda entidade entra no contexto, irá assegurar que depois de ambas as chamadas são feitas, cada produto em produtos terão uma categoria não-nulo.

Este não é o ideal, porque você está fazendo mais do que uma consulta, mas vai funcionar.

Uma alternativa é usar EFExtensions . O cara que escreveu que criou a capacidade de sprocs gravação que carregar mais dados de uma só vez.

Espero que isso ajude

Felicidades Alex

Outras dicas

Eu encontrei esta pergunta SO quando pesquisando Stored Procedures (SPs) com EF. Eu também vejo pessoas como @KristianNissen e @Todilo ter perguntado se há uma atualização com EF6.

A resposta é sim, EF 6 mudou as coisas, mas não acrescenta nada às propriedades de navegação ajuda de carga ao usar SPs. Também não se pode usar o método .include () com SPs como foi perguntado nesta SO questão .

A única maneira é escrever seu SP para carregar especificamente as propriedades de navegação. No entanto, há agora uma boa documentação da Microsoft sobre o uso de SPs - veja consulta SP SP retorno de vários resultados .

Para completar a mudança que EF versão 6 trazido era permitir Stored Procedures (SPs) para inserir punho, UPDATE e DELETE - veja artigo Microsoft e Entity Framework tutotial .

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