Include in Entity Framework 4 ile lambda ifadelerini kullanma


88

Bu sorunun üstesinden nasıl gelineceği hakkında, tümü CTP4 ile ilgili veya kendi uzatma yöntemlerimi ekleyen birçok makale gördüm.

İnclude içinde lambda ifadelerini kullanmanın "resmi" bir EF4 yolu var mı (hem birinci düzey ilişkiler hem de 2. ve daha fazla düzey için) veya sonunda RTM'ye dahil edilmedi mi?

Bir tane var - şimdi kodumda lambda ifadesini kullanmanın (# system.data.entity # system.data.linq ile) bana hala verdiği gibi, bunu nasıl yapacağımı öğrenmekten memnuniyet duyarım:

Lambda ifadesi 'string' türüne dönüştürülemiyor çünkü şu üzerinde bir temsilci türü değil:

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

1
hayır, mevcut değil (CTP4 dışında - sizin de söylediğiniz gibi). Tür güvenliğini sağlamak için uzatma yöntemlerini / numaralandırmalarını kullanıyorum.
RPM1984

Bunu ben de yaptım, bu yüzden MS CTP4'e dahil etti ve RTM'ye mi kaldırdı?
Dani

Yanıtlar:


230

İdare Framework 4.1 RTM sürümü aslında içerir uzatma yöntemleri içinde EntityFramework.dllaracılığıyla lambda'da istekli yükleme için dosya Includefonksiyonu. Sadece projenize DLL'yi dahil edin ve aşağıdaki gibi kod yazabilmelisiniz:

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

System.Data.Entity ad alanını dahil etmek için bir Import / Using ifadesi eklemeyi unutmayın . Aksi takdirde derleyici, uzantı yöntemlerini bulamaz. Örneğin:

using System.Data.Entity;

Daha fazla bilgi için bu ADO.NET ekip blog makalesine bakın.


1
ADO.net bloguna bağlantı hala geçerli olsa da, aynı konu için EF6 referansı / kılavuzu şudur: İlgili Varlıkları Yükleme Belgelerin, kullandıkları Blog ve Gönderi yerine Princess ve Unicorn örneklerine geçmesi gerektiğini düşünüyorum. her yerde.
Arkaine55

1
teşekkürler, ben sadece System.Data.Entity kullanarak ekliyorum; benim işim.
adnan

ekip blogu bağlantısı öldü, bu yeni konum
Nintynuts

90

Soruda bu ima edilmiş olsa da, lambdaları kullanamayacakları aynı sorunu yaşayan herkes için. Dahil et, şuna sahip olduğunuzdan emin olun:

using System.Data.Entity;

5

Hayır, şu anda RTM'de lambda ifadesine dahil etme için resmi bir destek yoktur. Ben kullanıyorum bu .

CTP4 dediğimizde Entity Framework Özelliğini kastediyoruz. EF4'ten daha yeni API'dir. Temelde Code First ve diğer birkaç iyileştirmeyi içerir.


MS bu özelliği ne zaman destekleyeceği hakkında bir fikriniz var mı? Tüm bu uzantı yöntemlerinin büyük / çok düzeyli nesneyle bir performans sorunu olduğunu anlıyorum - her include için her çağrıda tekrar tekrar gezinmeleri gerektiğinden ve nesne "tanım" ağacı sabitken ve önbelleğe alınabilirken, gibi bir çözüm yoktur. bu henüz.
Dani

Entity Framework Özelliği şu anda CTP5'te. Sanırım RTM sürümü 2011'in ilk çeyreğinde hazırlanmalı. Bu yüzden umarım bu lambda ifadesini içerecektir ancak henüz uygulanmasını kontrol etmedim, bu yüzden herhangi bir önbellekleme kullanıp kullanmadığını söyleyemem.
Ladislav Mrnka

31
Bu yanıt, EF 4.3.x itibariyle yanlıştır. Diğer cevaplar doğrudur, lamda ifadeleri ile aşırı yüklemeyi almak için System.Data.Entity kullanmak gerekir .
Eric J.

1
@EricJ: Evet. Türü kesin belirlenmiş Dahil Et, EF 4.1'den beri mevcuttur.
Ladislav Mrnka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.