Entity Framework 4 / POCO - Di mana untuk memulai? [Tutup]


183

Saya telah pemrograman untuk sementara waktu dan telah menggunakan LINQ-To-SQL dan LINQ-To-Entities sebelumnya (walaupun ketika menggunakan entitas itu telah pada hubungan Entity / Table 1-1 - yaitu tidak jauh berbeda dari L2SQL)

Saya telah banyak membaca tentang Inversion of Control, Unit Kerja, POCO dan pola penyimpanan dan ingin menggunakan metodologi ini dalam aplikasi baru saya.

Di mana saya berjuang menemukan panduan pemula yang jelas dan ringkas untuk EF4 yang tidak mengasumsikan pengetahuan EF1.

Pertanyaan spesifik yang perlu saya jawab adalah:

Kode dulu / model dulu? Pro / kontra sehubungan dengan EF4 (yaitu apa yang terjadi jika saya melakukan kode terlebih dahulu, mengubah kode di kemudian hari dan perlu meregenerasi model DB saya - Apakah data disimpan dan ditransformasikan atau dibuang?)

Dengan asumsi saya akan kode-pertama (saya ingin melihat bagaimana EF4 mengubahnya menjadi skema DB) bagaimana saya benar-benar memulai? Cukup sering saya melihat artikel dengan diagram entitas yang menyatakan "Jadi ini adalah model entitas saya, sekarang saya akan ..." - Sayangnya, saya tidak jelas apakah mereka membuat model dalam perancang, menyimpannya ke buat kode lalu hentikan pembuatan kode-otomatis lebih lanjut -atau- Mereka telah memberi kode (POCO)? kelas dan entah bagaimana mengimpornya ke tampilan deisgner?

Saya kira yang benar-benar saya butuhkan adalah pemahaman dari mana "sihir" itu berasal dan bagaimana menambahkannya sendiri jika saya tidak hanya membuat model EF langsung dari DB.

Saya sadar pertanyaannya agak kabur tetapi saya tidak tahu apa yang tidak saya ketahui - Jadi masukan / koreksi / klarifikasi dihargai.

Tidak perlu dikatakan, saya tidak berharap ada yang duduk di sini dan mengajari saya EF - Saya hanya ingin beberapa tutorial / forum / blog / etc yang bagus. untuk pemula entitas lengkap


3
benar-benar BENAR-BENAR hati-hati dengan masa koneksi Anda: bit.ly/fi83NV Ini adalah sesuatu yang Anda harus benar-benar sadar ketika mengabstraksi konteks ke dalam repositori. Tampaknya bisa berfungsi tetapi sebenarnya secara perlahan mempercepat koneksi terbuka
BritishDeveloper

@BRitishDeveloper - Saran yang sangat bagus. Ini benar-benar menarik perhatian kami tetapi sebaliknya - Kami menggunakan wadah IoC untuk mengambil repositori dan memiliki masalah di mana konteks yang ditetapkan ke repositori akan menutup koneksi setelah waktu yang lama tetapi tidak akan ditandai sebagai dibuang / dibuang. serupa. Kami akhirnya memperluas konteksnya sendiri dengan IsDisposed () yang memeriksa dengan kondisi pembuangan yang biasa dan kondisi koneksi yang memungkinkan kami untuk membangun yang lain jika diperlukan.
Dasar

Kiat berguna lainnya adalah bahwa ketika mendapatkan konteks baru, objek yang terkait dengan konteks lama tidak akan memiliki pelacakan perubahan yang sesuai dan akan menyebabkan masalah kesesuaian konteks - Jadi jika Anda memiliki aplikasi yang sudah berjalan lama dan ubah konteks di pertengahan. eksekusi, Anda perlu mengambil kembali semua entitas Anda. Untuk membuatnya lebih menarik, kita sebenarnya harus memiliki 2 berjalan berdampingan kadang-kadang dan akhirnya menulis beberapa kode untuk memetakan antara 2 dengan baik ...
Basic

1
@Basiclife Saya mengalami masalah yang sama :) Saya bermaksud menulis pemikiran saya tentang memperbarui entitas yang terpisah untuk sementara waktu dan Anda baru saja mendorong saya untuk melakukan hal itu: britishdeveloper.co.uk/2011/03/…
Pengembang Inggris

Jawaban:


56

Artikel-artikel ini mungkin menarik ... seri ini benar-benar membahas kelebihan dan kekurangan dari pendekatan POCO.

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading. aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

Dalam artikel ini penulis menyebutkan artikel mendatang yang menggambarkan praktik terbaik dalam menerapkan pola Repositori dan Unit Kerja, tetapi saya tidak dapat menemukannya. Artikel-artikel ini ditulis dengan baik dan saya ingin membaca lebih banyak dari penulis ini.


2
Karena seseorang sudah merasa nyaman dengan Entity Framework menggunakan perancang, ini adalah pengantar bagus untuk POCO.
nathanchere

1
Jika Anda mencari Unit Kerja, tindak lanjuti ada di blogs.msdn.com/b/adonet/archive/2009/06/16/…
Mike


7

Saya merekomendasikan agar Anda mengambil sekitar setengah jam dan menghasilkan model EF1.0 yang stabil di VS Anda saat ini. Itu akan membantu Anda memahami metafora dan konsep EF 4.0. Hanya menyiapkan Pelanggan, Produk, dan Pesanan sederhana db ... Saya sarankan Anda sendiri dan tidak menggunakan Northwind.


4

Ini adalah pertanyaan yang bagus, tetapi sulit untuk tetap up to date karena Entity Framework terus bertambah. Mungkin tempat terbaik untuk memulai yang akan tetap diperbarui di masa depan adalah halaman EF Microsoft .

Beberapa tautan lain yang saya temukan bermanfaat saat Googling (fokus pada Code First):


3

Anda dapat mengambil buku Lerman atau sesuatu yang lebih sederhana seperti "Pemetaan objek-relasional Pro linq". Semua konsep masih sama dengan POCO, kecuali sekarang Anda harus menonaktifkan pembuatan kode dan memetakan langsung ke model Anda di edmx csdl (atau membuat generator POCO Anda sendiri). Semua prinsip pemetaan juga sama. Bagaimanapun dalam jangka waktu Anda bekerja dengan proxy yang berasal dari objek POCO Anda sehingga Anda harus khawatir tentang dukungan intersepsi (virtualisasi properti POCO Anda).



2

Berikut adalah langkah - langkah di Templat POCO untuk Kerangka Entitas yang terlihat cukup bagus. Anda mungkin juga ingin melihat blog tim ADO.NET . Jika Anda ingin memulai dari awal (EF v1.0) sebagai dasar pengetahuan EF Anda, saya menemukan buku Kerangka Kerja Entitas Pemrograman Julia Lerman sangat lengkap.


Terima kasih - saya belum melihat buku itu tetapi saya sudah membaca kedua tautan yang disediakan. Panduan templat berguna dalam menjelaskan bagaimana fungsionalitas tambahan dapat ditambahkan ke objek POCO setelah ditetapkan (misalnya memuat Malas) tetapi (dan saya mungkin kehilangan sesuatu yang jelas di sini) itu tidak benar-benar menjelaskan cara memulai (yaitu hanya membuat kelas seperti yang ditentukan tidak menjadikannya entitas atau mengasosiasikannya dengan model) Saya memiliki pengalaman serupa dengan blog. Saya akan mempertimbangkan untuk mendapatkan buku itu - Kelihatannya menjanjikan - Terima kasih.
Dasar

2
Mengenai buku Julia Lerman, perlu disebutkan bahwa ia sedang mengerjakan edisi kedua yang mencakup EF4: learnentityframework.com/LearnEntityFramework/book/… . Saya ingat bahwa saya telah membaca di suatu tempat bahwa tanggal penerbitan yang direncanakan adalah pada bulan Mei tahun ini tetapi saya tidak dapat menemukan sumbernya lagi. Saya juga baru saja menemukan situs ini: nakedobjects.net/home/index2.shtml
Slauma

Slauma, tautan yang Anda berikan mirip persis dengan apa yang saya butuhkan - kecuali itu menggunakan perpustakaan "Naked Obects" pihak ke-3 yang tampaknya membingungkan kerumitannya entah bagaimana - Selama satu menit, saya pikir Anda akan memecahkannya
Basic


1

Julia Lerman memiliki serangkaian video pengantar yang bagus , masing-masing sekitar 10 menit. Mereka adalah pengantar, tetapi ada banyak tips praktis yang membuat beberapa penghalang pembelajaran potensial terhalang. Saya terutama menyukai demonstrasi menonton SQL aktual dengan menggunakan SQL Server Profiler.


1

Jika Anda akan menggunakan skenario terputus, saya sarankan Anda membaca buku Julie Lerman: "Programming DbContext", dalam Bab 4 khusus.

Saya menemukan banyak contoh di blog, dll, tetapi hampir semuanya tentang skenario yang terhubung.

Saya mulai juga. dan buku ini banyak membantu saya. Ngomong-ngomong, saya membeli tiga bukunya.



0

Wow, banyak jawaban. Bagaimana dengan contoh yang berisi versi T4 templat yang di-tweak yang menghasilkan antarmuka POCO + repositori sekaligus?

https://entityinterfacegenerator.codeplex.com


Menarik dan berguna untuk menguji repositori / konteks, tetapi mengapa Anda perlu mengabstraksi entitas itu sendiri? Menurut definisi mereka seharusnya tidak memiliki kode fungsional di dalamnya.
Dasar

Anda benar. Kebanyakan, orang tidak perlu memiliki antarmuka yang terpisah. Tapi itu membantu orang yang ingin menyelesaikan referensi melingkar dan ingin berbagi antarmuka, bukan kelas yang sebenarnya, dengan pihak ketiga. Ini akan banyak membantu jika perusahaan Anda harus lulus audit dengan integrasi pihak ke-3 yang tidak memerlukan implementasi detail dalam berbagi.
Believe2014
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.