Menggunakan Include in Entity Framework 4 dengan ekspresi lambda


88

Saya telah melihat banyak artikel tentang cara mengatasi masalah ini, semua terkait dengan CTP4, Atau menambahkan metode ekstensi saya sendiri.

Apakah ada cara menyertakan EF4 "resmi" untuk menggunakan ekspresi lambda di dalam include (untuk hubungan tingkat pertama dan juga tingkat ke-2 dan lebih banyak) atau apakah itu akhirnya tidak disertakan dalam RTM?

Itu ada satu - Saya akan senang belajar bagaimana melakukannya, karena menggunakan ekspresi lambda dalam kode saya sekarang (dengan # system.data.entity # system.data.linq) masih memberi saya:

Tidak dapat mengubah ekspresi lambda menjadi tipe 'string' karena ini bukan tipe delegasi pada:

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

1
tidak, itu tidak ada (selain CTP4 - seperti yang Anda katakan). Saya menggunakan metode ekstensi / enum untuk mencapai keamanan tipe.
RPM1984

Saya melakukannya juga, jadi MS memasukkannya ke dalam CTP4 dan menghapusnya di RTM?
Dani

Jawaban:


229

Versi RTM dari Entity Framework 4.1 sebenarnya menyertakan metode ekstensi dalam EntityFramework.dllfile, untuk memuat dengan lambda melalui Includefungsi tersebut. Cukup sertakan DLL dalam proyek Anda dan Anda harus dapat menulis kode seperti:

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

Ingatlah untuk menambahkan pernyataan Import / Using untuk menyertakan namespace System.Data.Entity . Jika tidak, kompilator tidak dapat menemukan metode ekstensi. Misalnya:

using System.Data.Entity;

Lihat artikel blog tim ADO.NET ini untuk informasi lebih lanjut.


1
Meskipun tautan ke blog ADO.net masih relevan, referensi / panduan EF6 untuk topik yang sama adalah: Memuat Entitas Terkait Menurut saya dokumentasinya perlu beralih ke contoh Putri dan Unicorn, bukan Blog dan Posting yang mereka gunakan dimana mana.
Arkaine55

1
terima kasih, saya hanya menambahkan menggunakan System.Data.Entity; itu berhasil saya.
adnan

Tautan blog tim mati, ini adalah lokasi baru
Nintynuts

89

Meskipun ini tersirat dalam pertanyaan, bagi siapa pun yang memiliki masalah yang sama di mana mereka tidak dapat menggunakan lambda dengan. Termasuk, pastikan Anda memiliki ini:

using System.Data.Entity;

5

Tidak ada dukungan resmi untuk Sertakan dengan ekspresi lambda di RTM saat ini. Saya menggunakan ini .

Ketika kita berbicara tentang CTP4 yang kita maksud adalah Fitur Kerangka Kerja Entitas. Ini adalah API yang lebih baru dari EF4. Ini terutama mencakup Code First dan beberapa peningkatan lainnya.


Ada ide kapan MS akan mendukung fitur ini? Saya memahami bahwa semua metode ekstensi ini memiliki masalah kinerja dengan objek besar / bertingkat - karena mereka perlu melintasi lagi dan lagi setiap panggilan untuk menyertakan, dan sementara pohon "definisi" objek konstan dan dapat di-cache, tidak ada solusi seperti ini belum.
Dani

Fitur Entity Framework saat ini ada di CTP5. Saya kira versi RTM harus digunakan pada kuartal pertama tahun 2011. Jadi mudah-mudahan ini akan berisi Include dengan ekspresi lambda tetapi saya belum memeriksa implementasinya jadi saya tidak bisa mengatakan apakah itu menggunakan caching jenis apa pun.
Ladislav Mrnka

31
Jawaban ini salah pada EF 4.3.x. Jawaban lainnya benar, seseorang harus menggunakan System.Data.Entity untuk mendapatkan kelebihan dengan ekspresi lamda.
Eric J.

1
@EJ: Ya. Sertakan yang diketik dengan kuat tersedia sejak EF 4.1.
Ladislav Mrnka
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.