Usando Incluir no Entity Framework 4 com expressões lambda


88

Já vi muitos artigos sobre como superar esse problema, todos relacionados ao CTP4, Ou adicionando meus próprios métodos de extensão.

Existe uma maneira "oficial" de EF4 incluído para usar expressões lambda dentro de include (para relações de primeiro nível e também de segundo e nível superior) ou eventualmente não foi incluído no RTM?

Existe um - eu ficaria feliz em aprender como fazê-lo, já que usar a expressão lambda em meu código agora (com # system.data.entity # system.data.linq) ainda me dá:

Não é possível converter a expressão lambda para o tipo 'string' porque não é um tipo de delegado em:

var customers = from c in
context.Customers.Include(c=>c.Phone)

1
não, não existe (além do CTP4 - como você diz). Eu uso métodos de extensão / enums para alcançar a segurança de tipo.
RPM 1984

Eu fiz isso também, então o MS incluiu no CTP4 e removeu no RTM?
Dani

Respostas:


229

A versão RTM do Entity Framework 4.1 na verdade inclui métodos de extensão no EntityFramework.dllarquivo, para carregamento rápido com lambda por meio da Includefunção. Basta incluir a DLL em seu projeto e você deverá ser capaz de escrever códigos como:

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

Lembre-se de adicionar uma instrução Import / Using para incluir o namespace System.Data.Entity . Caso contrário, o compilador não pode encontrar os métodos de extensão. Por exemplo:

using System.Data.Entity;

Consulte este artigo do blog da equipe ADO.NET para obter mais informações.


1
Embora o link para o blog ADO.net ainda seja relevante, a referência / guia do EF6 para o mesmo tópico é: Carregando entidades relacionadas Acho que a documentação precisa mudar para exemplos de Princesa e Unicórnio em vez do Blog e Post que eles estão usando em toda parte.
Arkaine55,

1
obrigado, acabei de adicionar using System.Data.Entity; seu trabalho me.
adnan

link do blog da equipe está morto, este é o novo local
Nintynuts

89

Embora isso esteja implícito na pergunta, para qualquer pessoa que tenha o mesmo problema em que não pode usar lambdas com .Include, certifique-se de ter isto:

using System.Data.Entity;

5

Não, não há suporte oficial para Incluir com expressão lambda no RTM no momento. Estou usando isso .

Quando falamos sobre CTP4, estamos nos referindo ao Entity Framework Feature. É uma API mais recente que EF4. Inclui principalmente o Code First e algumas outras melhorias.


Alguma ideia de quando o MS oferecerá suporte a esse recurso? Eu entendo que todos esses métodos de extensão têm um problema de desempenho com objetos grandes / multiníveis - pois eles precisam percorrer repetidamente cada chamada para incluir e, embora a árvore de "definição" do objeto seja constante e possa ser armazenada em cache, não há solução como isso ainda.
Dani

O Entity Framework Feature está atualmente em CTP5. Acho que a versão RTM deve ser publicada no primeiro trimestre de 2011. Portanto, espero que contenha Incluir com expressão lambda, mas ainda não verifiquei sua implementação, então não posso dizer se usa algum tipo de cache.
Ladislav Mrnka

31
Esta resposta está errada em EF 4.3.x. As outras respostas estão certas, deve-se ter o uso de System.Data.Entity para obter a sobrecarga com expressões lamda.
Eric J.

1
@EricJ: Sim. A inclusão fortemente tipada está disponível desde EF 4.1.
Ladislav Mrnka
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.