Aplikasi yang saya bangun saat ini telah menggunakan prosedur tersimpan dan model kelas kerajinan tangan untuk mewakili objek database. Beberapa orang menyarankan menggunakan Entity Framework dan saya mempertimbangkan untuk beralih ke itu karena saya tidak terlalu jauh ke dalam proyek. Masalah saya adalah, saya merasa orang-orang yang berdebat untuk EF hanya memberi tahu saya sisi baiknya, bukan sisi buruknya :)
Kekhawatiran utama saya adalah:
- Kami ingin validasi Sisi Klien menggunakan DataAnnotations, dan sepertinya saya harus membuat model sisi klien jadi saya tidak yakin EF akan menghemat banyak waktu pengkodean
- Kami ingin menjaga kelas sekecil mungkin ketika melewati jaringan, dan saya telah membaca bahwa menggunakan EF sering menyertakan data tambahan yang tidak diperlukan
- Kami memiliki lapisan basis data yang kompleks yang melintasi beberapa basis data, dan saya tidak yakin EF dapat menangani ini. Kami memiliki satu database umum dengan hal-hal seperti Pengguna, Kode Status, Jenis, dll, dan beberapa contoh dari basis data utama kami untuk berbagai contoh aplikasi. SELECT queries dapat dan akan melakukan query di seluruh instance dari database, namun pengguna hanya dapat memodifikasi objek yang ada dalam database yang sedang mereka kerjakan. Mereka dapat mengganti basis data tanpa memuat ulang aplikasi.
- Mode objek sangat kompleks dan sering ada beberapa gabungan yang terlibat
Argumen untuk EF adalah:
- Konkurensi. Saya tidak perlu kode cek untuk melihat apakah catatan telah diperbarui sebelum setiap penyimpanan
- Pembuatan Kode. EF dapat menghasilkan model kelas parsial dan POCO untuk saya, tetapi saya tidak yakin ini akan sangat menghemat waktu karena saya pikir kita masih perlu membuat model sisi klien untuk validasi dan beberapa metode penguraian khusus.
- Kecepatan pengembangan karena kita tidak perlu membuat prosedur tersimpan CRUD untuk setiap objek basis data
Arsitektur kami saat ini terdiri dari Layanan WPF yang menangani panggilan basis data melalui Prosedur Tersimpan parameter, objek POCO yang pergi ke / dari layanan WCF dan klien WPF, dan klien desktop WPF itu sendiri yang mengubah POCO menjadi Model kelas untuk tujuan Validasi dan Pengikatan Data.
Jadi pertanyaan saya adalah, apakah EF tepat untuk ini? Apakah ada jebakan tentang EF yang tidak saya sadari?
sumber
Jawaban:
Baru-baru ini saya mengevaluasi Entity Framework dan tempat terbaik yang saya temukan untuk masalah dan fitur yang hilang adalah: http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions
Item dengan suara terbanyak:
Ada banyak masalah lagi dalam daftar Suara Pengguna.
Sebagai tambahan, saya cukup senang dengan rilis EF 4.1 yang akan datang yang akan mencakup pendekatan Code-First ... http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4 -1-release-kandidat-available.aspx
Ini mungkin mendorong saya untuk mencoba EF dalam aplikasi produksi.
sumber
.ToList()
atau.ToArray
) sebelum ekspresi LINQ Anda sepenuhnya ditentukan. Itu sebabnya ia menarik semua catatan dan membuatnya lambat.Melakukan branch-per-bug / fitur dengan EF bisa sangat menyakitkan pada saat digabung. Bayangkan bahwa dua cabang A dan B membuat perubahan pada basis data (yang mungkin akan banyak terjadi pada tahap awal proyek baru).
Anda menggabungkan semua file "normal" - file cs, dll. Dan sekarang saatnya untuk menggabungkan Model.edmx. Dan tiba-tiba Anda tidak hanya menggabungkan pemetaan logis antara model objek dan database Anda, tetapi juga posisi tabel dalam diagram entitas.
Menggabungkan Model.edmx sangat menyakitkan sehingga kami mengadopsi Cara yang Cukup Buruk:
sumber
Ada beberapa manfaat lain untuk EF yang Anda lewatkan:
Kerugiannya (terutama jika Anda menggunakan validasi):
object
tipe, jadi hanya ada di sana untuk membaca metadata. Masih banyak kode ekstra tidak aktif.Itu adalah dua keluhan terbesar yang saya miliki. Ada sejumlah manfaat, tetapi Anda mungkin bisa mendapatkan manfaat yang sama dari NHibernate. Jika EntityFramework ada di atas meja, minta tim juga memeriksa NHibernate dan melakukan pemotretan cepat untuk pro / kontra untuk proyek Anda .
Masalah kelas metadata adalah sakit kepala, tapi untungnya saya hanya memiliki begitu banyak entitas yang memerlukan tag validasi.
Kurangnya mode terpisah yang benar untuk objek Anda membatasi apa yang dapat Anda lakukan di lingkungan web. Mode terlampir lebih baik untuk aplikasi desktop, yang merupakan tempat sejumlah inovasi Microsoft berasal. Mode terlepas mungkin , tetapi sangat menyakitkan. Cara terbaik untuk menggunakan alat alternatif dalam hal ini.
sumber
using(EFConnection conn = new EFConnection)
konstruk. Jika Anda mencoba untuk menyembunyikan objek itu di suatu tempat agar tetap aman sehingga Anda dapat melakukan pembaruan cepat dan menyimpannya lagi dalamusing(...)
pernyataan kedua , Anda harus berpikir lagi. Lihat msdn.microsoft.com/en-us/library/bb896271.aspx dan msdn.microsoft.com/en-us/library/bb896248.aspx . Menggunakan EF 3.5 (yang harus saya gunakan pada versi terakhir) bahkan tidak sebersih itu.Satu hal Microsoft tidak sangat baik di adalah mundur
komparabilitaskompatibilitas, terutama ketika datang ke teknologi baruKhususnya EF1 (.net 3.5) sangat berbeda dari EF4 (.net 4.0) - hal yang sama mungkin terjadi untuk versi berikutnya.
Saya akan menunggu sebentar dan melihat bagaimana teknologi matang.
Sementara itu, pertimbangkan untuk menggunakan nHibernate - ini tidak setara, tetapi sudah matang dan digunakan secara liar.
sumber
...
Saya bisa menulis cacian 10 halaman. Tapi, jika Anda hanya menulis beberapa aplikasi membuang untuk Perusahaan X .. yang peduli saat itu. Tetapi, jika Anda mengembangkan produk perangkat lunak ... Anda harus menjadi lebih anal
sumber
Lihat ini: http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/
Poin utamanya adalah:
Perhatikan bahwa tautan di atas berbicara tentang EF1.
Juga tautan ini: http://ormeter.net/ menunjukkan bahwa EF bukan yang terbaik dibandingkan dengan ORM lain dalam kinerja dan dukungan LINQ.
sumber