Apakah Kode Kerangka Entitas Pertama agak tidak berarti / tidak berguna dalam produksi dan apa strategi EF yang baik untuk produksi?

29

Saya baru-baru ini memprogram dengan Entity Framework 4.1 Code First dan saya menyukainya untuk pengembangan, tetapi dengan hanya rencana akhir dan daftar fitur yang berubah dengan cepat, saya terus-menerus memodifikasi Kelas / Database untuk memenuhi kebutuhan aplikasi.

Dalam pengembangan, tidak ada data langsung dan saya dapat dengan mudah menghapus seluruh database sehingga dibuat kembali dengan skema baru, tetapi, tentu saja, ketika live - ini sangat buruk!

Satu-satunya solusi yang bisa saya lihat adalah dengan menjatuhkan tabel metadata dan secara manual menjaga database tetap sinkron atau pada dasarnya drop dan reseed.

Saya pribadi lebih suka metode pertama karena saya pikir akan jauh lebih mudah untuk menambahkan kolom / tabel daripada membuat ulang dan memigrasikan data, tetapi, kecuali saya melewatkan sesuatu, ini benar-benar menjauh dari Code First.

Jadi pertanyaannya adalah, apakah Code First hanya tentang pengembangan awal dan apa strategi yang baik untuk mengelola EF untuk lingkungan produksi?

wilhil
sumber
Berniat

Jawaban:

15

Pendapat saya adalah bahwa pembuatan basis data otomatis kode pertama hanya untuk pengembangan. Saya menjawab pertanyaan serupa di Stack Overflow di mana saya menjelaskan cara meng-upgrade database dan mengapa fungsi otomatis buruk dalam produksi:

Memutakhirkan database adalah tugas semi-manual. Seharusnya tidak ada sihir yang belum teruji secara otomatis - apalagi EF 4.1 saat ini tidak memiliki keajaiban seperti itu (hanya ada beberapa presentasi tentang fitur yang sedang dikerjakan oleh tim ADO.NET).

Anda juga dapat memeriksa pertanyaan ini untuk lebih memahami bagaimana situs web ditingkatkan.

Ladislav Mrnka
sumber
Halo lagi! -Anda cepat dalam soal EF! :) ... Tidak tahu di mana aku akan tanpamu!
wilhil
Beberapa bulan kemudian dan program saya cukup selesai ... Saya menandai ini sebagai jawaban, tetapi, saya bertanya-tanya apakah ada yang berubah / apakah ada sumber daya yang dapat membantu?
wilhil
2
Pratinjau publik pertama "Migrasi" dirilis. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka
Terima kasih, lihat itu sekarang! Saya senang berkembang dengan Code First, tetapi, saya sangat gugup / khawatir akan perubahan nanti!
wilhil
Bagaimana Anda menangani kasus di mana StoredProcs atau Views dibuat langsung di DB untuk tujuan lain misalnya pelaporan yang tidak digunakan oleh aplikasi. Kita perlu mengetahui SP mana yang dipengaruhi oleh perubahan skema dalam kode terlebih dahulu.
softveda
5

Pertahankan skrip pemutakhiran .

Dalam database itu sendiri, pertahankan tabel di mana catatan disimpan dengan versi skema.

Ketika aplikasi Anda mulai, itu mendeteksi versi terhadap versi yang seharusnya digunakan oleh binari. Jika berbeda, ia menjalankan (atau meminta pengguna) skrip pemutakhiran.

Jangan lupa untuk membuat cadangan basis data terlebih dahulu.


sumber
Langkah selanjutnya: Anda dipecat;) Pembaruan basis data seharusnya tidak ahppen secara otomatis tanpa cadangan terlebih dahulu - dan mungkin dalam downtime, bukan ketika ONE USER menjalankan versi yang lebih baru. Pendekatan Anda sempurna - untuk mematikan penyebaran yang lebih besar dengan banyak kesalahan.
TomTom
@ TomTom: itu tergantung. Kami menjalankan aplikasi DB dengan sempurna selama beberapa tahun yang melakukan hal ini: skema perubahan otomatis untuk rilis baru, dilakukan oleh aplikasi ketika mendeteksi versi yang terlalu lama. Pencadangan dilakukan setiap hari, dan kami menjaga semua perubahan skema kompatibel (hanya menambahkan bidang & tabel, tidak pernah menghapus apa pun). Saya setuju bahwa langkah-langkah yang Anda sebutkan penting ketika perubahan tidak kompatibel mundur, dan Anda tidak dapat menjamin semua aplikasi klien diperbarui secara bersamaan (misalnya, untuk DB perusahaan besar).
Doc Brown
Di atas jika perubahannya tidak sepele. Cobalah mengubah bidang dalam tabel 2tb (dan ya, saya berurusan dengan ini - dan itu bahkan bukan data warehoue). Anda telah menempatkan diri dalam skenario di mana Anda mengumpulkan utang teknis karena Anda hanya dapat menambahkan bidang, tidak pernah membersihkan.
TomTom
2

Pertanyaannya entah bagaimana cacat karena membuat koneksi antara model pemrograman dan lingkungan runtime di mana tidak ada.

Kode pertama terutama adalah driver kecepatan pengembangan dan tidak benar-benar terhubung ke sistem runtime.

Dalam produksi, Anda akan memiliki pengaturan konfigurasi yang benar yang menolak runtime kemungkinan menghapus / memperbarui model db.

Casper
sumber