Keluar dari proyek menggunakan Linq2Sql, saya menduga bahwa yang berikutnya (lebih besar) mungkin mendorong saya ke dalam pelukan Entity Framework. Saya telah melakukan beberapa pembacaan pada subjek, tetapi apa yang saya belum berhasil temukan adalah cerita yang koheren tentang bagaimana SQL Server Data Tools dan Entity Framework harus / bisa / mungkin digunakan bersama.
- Apakah mereka dikonsepsikan sepenuhnya secara terpisah, dan menggunakannya bersama membelai dengan cara yang salah?
- Apakah mereka entah bagaimana benar-benar ortogonal dan saya tidak mengerti intinya?
Beberapa alasan mengapa saya pikir saya ingin keduanya:
- SSDT sangat bagus untuk memiliki 'dikompilasi' (dicentang) dan mudah sql dan skema versi
- Tetapi kisah 'migrasi / pembaruan' SSDT tidak meyakinkan (bagi saya): "Perbarui apa pun" berfungsi dengan baik untuk skema, tetapi tidak ada cara (AFAIK) yang dapat bekerja untuk data.
- Di sisi lain, saya belum mencoba migrasi EF untuk mengetahui apakah ada masalah yang sama, tetapi bit Atas / Bawah terlihat cukup praktis.
entity-framework
Benjol
sumber
sumber
Jawaban:
Biarkan saya menempatkan sudut pandang lain. Pemeliharaan Basis Data Entity Framework sama sekali tidak berguna di perusahaan atau proyek basis data besar.
Masalahnya adalah:
Pembaruan skema otomatis. Ini sama sekali bukan yang saya inginkan karena benar-benar melanggar dasar-dasar pemeliharaan basis data. Masalahnya adalah: (a) seseorang yang menjalankan versi yang lebih baru memperbarui basis data alih-alih mendapatkan masalah dan (b) pembaruan dijadwalkan dengan dBA yang biasanya mengambil cadangan PERTAMA. Jadi, pembaruan otomatis tidak berguna.
Penciptaan Db hanya bekerja pada kasus tepi yang pada dasarnya merosot. Jangan pernah mencoba menggunakan fitur basis data tingkat lanjut - apa pun yang ada. Contoh server Sql: termasuk bidang dalam indeks, filter pada indeks, partisi, kompresi, aturan validasi untuk bidang.
Migrasi - mengasumsikan kasus tepi degenerasi lagi: tidak ada transformasi data atau pembaruan multi langkah dengan mudah. Contoh: Tabel X memiliki bidang "pengguna" historis yang mencatat pengguna melakukan sesuatu. Setup baru memiliki tabel Pengguna, jadi orang perlu membuat tabel pengguna, lalu membuat pengguna, lalu membuat bidang referensi pengguna dalam tabel x, kemudian memperbarui ini dengan pengguna itu dari tabel pengguna, lalu hapus bidang pengguna.
Satu-satunya cara yang masuk akal untuk menangani skenario ini adalah skrip generasi dan migrasi dan versi yang tepat.
Sekarang, SSDT - yang merupakan alat yang hebat untuk membuat versi versi database tertentu jauh lebih baik daripada Entity Framework karena sebenarnya - berfungsi. Seperti pada: ia merekam semua fitur. Tidak ada database yang saya miliki, saya cukup banyak dapat menggunakan kode terlebih dahulu - karena kita selalu setidaknya telah memfilter indeks;) EF bahkan tidak akan membuat saya sampai 10% dari yang saya butuhkan.
Pendekatan kami adalah:
Rancang basis data dalam basis data, lalu sinkronkan ke modul SSDT yang akan diperiksa. Sinkronisasi skema memungkinkan pengembang memperbarui versi mereka dengan cepat. Selalu ada database master otoritatif dengan versi saat ini di suatu tempat (di server khusus) sehingga kami memiliki versi referensi untuk bekerja melawan.
Buat skrip delta sesuai kebutuhan untuk rilis yang juga mendapatkan versi dan memiliki mekanisme yang bagus untuk menyebarkannya ke database.
sumber
Ada lebih dari satu cara untuk menggunakan EF dengan database SQL Server.
EF tidak perlu melakukan semua pekerjaan untuk Anda. EF akan membuat Anda sekitar 80 hingga 95 persen di sana. 5 hingga 20 persen upaya pengembangan basis data Anda lainnya akan dilengkapi dengan optimasi seperti Views dan Stored Procedures.
Jadi tidak, mereka tidak ortogonal. Tetapi Anda harus memutuskan apa strategi keseluruhan desain Anda nantinya, dan kemudian bergantung pada alat seperti SSDT untuk membantu Anda mengoptimalkan bagian-bagian di mana EF menghasilkan kurang dari hasil yang ideal.
sumber