Apa pro & kontra menggunakan Entity Framework 4.1 Code-first over Model / Database-first dengan diagram EDMX?
Saya mencoba untuk sepenuhnya memahami semua pendekatan untuk membangun lapisan akses data menggunakan EF 4.1. Saya menggunakan pola Repositori dan IoC
.
Saya tahu saya bisa menggunakan pendekatan kode-pertama: mendefinisikan entitas dan konteks saya dengan tangan dan menggunakan ModelBuilder
untuk menyempurnakan skema.
Saya juga bisa membuat EDMX
diagram dan memilih langkah pembuatan kode yang menggunakan templat T4 untuk menghasilkan POCO
kelas yang sama .
Dalam kedua kasus saya berakhir dengan POCO
objek yang ORM
agnostik dan konteks yang berasal DbContext
.
Database-pertama tampaknya paling menarik karena saya dapat merancang database di Enterprise Manager, dengan cepat menyinkronkan model dan menyempurnakannya menggunakan desainer.
Jadi apa perbedaan antara kedua pendekatan itu? Apakah hanya tentang preferensi VS2010 vs Enterprise Manager?
sumber
Jawaban:
Saya pikir perbedaannya adalah:
Kode dulu
Database dulu
Model dulu
Saya berharap bahwa dalam kasus EF 4.1 ada beberapa fitur lain yang terkait dengan Code First vs. Model / Database terlebih dahulu. API Lancar yang digunakan dalam Kode pertama tidak menawarkan semua fitur EDMX. Saya berharap bahwa fitur-fitur seperti pemetaan prosedur tersimpan, tampilan kueri, pandangan mendefinisikan dll berfungsi ketika menggunakan Model / Database terlebih dahulu dan
DbContext
(saya belum mencobanya) tetapi mereka tidak dalam Kode terlebih dahulu.sumber
DbContext
yang adaObjectContext
cukup gunakan((IObjectContextAdapter)dbcontext).ObjectContext
.Saya pikir "pohon keputusan" sederhana ini oleh Julie Lerman penulis "Programming Entity Framework" harus membantu membuat keputusan dengan lebih percaya diri:
Info lebih lanjut Di Sini .
sumber
Database pertama dan model pertama tidak memiliki perbedaan nyata. Kode yang dihasilkan sama dan Anda dapat menggabungkan pendekatan ini. Misalnya, Anda dapat membuat database menggunakan desainer, daripada Anda dapat mengubah database menggunakan skrip sql dan memperbarui model Anda.
Ketika Anda menggunakan kode terlebih dahulu, Anda tidak dapat mengubah model tanpa database rekreasi dan kehilangan semua data. IMHO, batasan ini sangat ketat dan tidak memungkinkan untuk menggunakan kode terlebih dahulu dalam produksi. Untuk saat ini itu tidak benar-benar dapat digunakan.
Kelemahan minor kedua dari kode pertama adalah bahwa pembuat model memerlukan hak istimewa pada database master. Ini tidak mempengaruhi Anda jika Anda menggunakan database SQL Server Compact atau jika Anda mengontrol server database.
Kelebihan kode pertama adalah kode yang sangat bersih dan sederhana. Anda memiliki kontrol penuh atas kode ini dan dapat dengan mudah memodifikasi dan menggunakannya sebagai model tampilan Anda.
Saya dapat merekomendasikan untuk menggunakan pendekatan kode pertama ketika Anda membuat aplikasi mandiri sederhana tanpa versi dan menggunakan model \ database terlebih dahulu dalam proyek yang membutuhkan modifikasi dalam produksi.
sumber
Mengutip bagian-bagian yang relevan dari http://www.itworld.com/development/405005/3-reason-use-code-first-design-entity-framework
sumber
Code-first tampaknya adalah bintang yang naik daun. Saya melihat Ruby on Rails dengan cepat, dan standar mereka adalah kode-pertama, dengan migrasi basis data.
Jika Anda sedang membangun aplikasi MVC3, saya percaya Code pertama memiliki keuntungan sebagai berikut:
Memperbarui
Pertanyaannya juga meminta perbandingan kode-pertama dengan model EDMX / db-pertama. Code-first dapat digunakan untuk kedua pendekatan ini juga:
sumber
Saya menggunakan basis data EF terlebih dahulu untuk memberikan lebih banyak fleksibilitas dan kontrol atas konfigurasi basis data.
Pertama kode EF dan model pertama tampak keren pada awalnya, dan memberikan kemandirian basis data, namun dalam melakukan hal ini tidak memungkinkan Anda untuk menentukan apa yang saya anggap informasi konfigurasi basis data yang sangat mendasar dan umum. Misalnya indeks tabel, metadata keamanan, atau memiliki kunci utama yang berisi lebih dari satu kolom. Saya menemukan saya ingin menggunakan ini dan fitur-fitur database umum lainnya dan karena itu harus melakukan beberapa konfigurasi database secara langsung.
Saya menemukan kelas POCO default yang dihasilkan selama DB pertama sangat bersih, namun tidak memiliki atribut anotasi data yang sangat berguna, atau pemetaan untuk prosedur yang tersimpan. Saya menggunakan template T4 untuk mengatasi beberapa keterbatasan ini. Templat T4 mengagumkan, terutama jika dikombinasikan dengan metadata dan kelas parsial Anda sendiri.
Model pertama tampaknya memiliki banyak potensi, tetapi memberi saya banyak bug selama refactoring skema database yang kompleks. Tidak yakin kenapa.
sumber
Bekerja dengan model besar sangat lambat sebelum SP1, (belum mencobanya setelah SP1, tetapi dikatakan sekarang sangat mudah).
Saya masih mendesain meja saya terlebih dahulu, kemudian alat in-house yang dibuat menghasilkan POCO untuk saya, sehingga dibutuhkan beban melakukan tugas yang berulang untuk setiap objek poco.
ketika Anda menggunakan sistem kontrol sumber, Anda dapat dengan mudah mengikuti sejarah POCO Anda, tidak mudah dengan kode yang dihasilkan desainer.
Saya memiliki basis untuk POCO saya, yang membuat banyak hal cukup mudah.
Saya memiliki pandangan untuk semua tabel saya, setiap tampilan dasar membawa info dasar untuk kunci asing saya dan pandangan saya POCO berasal dari kelas POCO saya, yang sangat berguna lagi.
Dan akhirnya saya tidak suka desainer.
sumber
Contoh pertama pendekatan basis data:
Tanpa menulis kode apa pun: ASP.NET MVC / MVC3 Database First Approach / Database terlebih dahulu
Dan saya pikir itu lebih baik daripada pendekatan lain karena kehilangan data kurang dengan pendekatan ini.
sumber
IMHO Saya berpikir bahwa semua model memiliki tempat yang bagus tetapi masalah yang saya miliki dengan pendekatan pertama model adalah di banyak bisnis besar dengan DBA mengendalikan database Anda tidak mendapatkan fleksibilitas membangun aplikasi tanpa menggunakan pendekatan basis data terlebih dahulu. Saya telah bekerja di banyak proyek dan ketika datang untuk penempatan mereka ingin kontrol penuh.
Jadi sebanyak yang saya setuju dengan semua variasi yang mungkin Kode Pertama, Model Pertama, Database pertama, Anda harus mempertimbangkan lingkungan produksi yang sebenarnya. Jadi jika sistem Anda akan menjadi aplikasi basis pengguna yang besar dengan banyak pengguna dan DBA yang menjalankannya, maka Anda dapat mempertimbangkan opsi Basis Data pertama hanya pendapat saya.
sumber
Saya pikir salah satu Kelebihan kode pertama adalah bahwa Anda dapat membuat cadangan semua perubahan yang Anda buat ke sistem kontrol versi seperti Git. Karena semua tabel dan hubungan Anda disimpan dalam apa yang pada dasarnya hanya kelas, Anda dapat kembali ke masa lalu dan melihat struktur database Anda sebelumnya.
sumber