Saya telah memasuki kondisi buruk dengan proyek ASP.Net MVC 5 saya, menggunakan Code-First Entity Framework. Saya tidak peduli tentang kehilangan data, saya hanya ingin dapat memulai baru, membuat ulang database dan mulai menggunakan migrasi Code-First.
Saat ini saya dalam keadaan di mana setiap upaya untuk Perbarui-Database menghasilkan pengecualian yang dilemparkan atau mendapatkan pesan kesalahan. Juga situs web tidak dapat mengakses database dengan benar. Bagaimana saya bisa menghapus semua migrasi, membuat kembali basis data dan memulai dari awal tanpa harus membuat proyek baru? Dengan kata lain, saya ingin menyimpan kode saya tetapi drop database.
Nanti saya juga akan ingin mendapatkan database penyebaran (SQL Server on Azure) dalam sinkronisasi. Sekali lagi, saya tidak keberatan menjatuhkan semua data - Saya hanya ingin membuatnya berfungsi.
Harap sediakan langkah-langkah bagaimana untuk kembali ke keadaan bersih. Sangat dihargai.
sumber
DROP DATABASE
maka ....Jawaban:
Ikuti langkah-langkah di bawah ini:
1) Pertama pergi ke Server Explorer di Visual Studio, periksa apakah ".mdf" Koneksi Data untuk proyek ini terhubung, jika demikian, klik kanan dan hapus.
2) Buka Solution Explorer, klik tampilkan ikon Semua File.
3) Buka App_Data, klik kanan dan hapus semua file ".mdf" untuk proyek ini.
4) Hapus folder Migrasi dengan mengklik kanan dan menghapus.
5) Buka SQL Server Management Studio, pastikan DB untuk proyek ini tidak ada, jika tidak hapuslah.
6) Pergi ke Package Manager Console di Visual Studio dan ketik:
Enable-Migrations -Force
Add-Migration init
Update-Database
7) Jalankan aplikasi Anda
Catatan: Pada langkah 6 bagian 3, jika Anda mendapatkan kesalahan "Tidak dapat melampirkan file ...", itu mungkin karena Anda tidak menghapus file database sepenuhnya di SQL Server.
sumber
Saya ingin menambahkan bahwa jawaban Lin benar.
Jika Anda menghapus MDF secara tidak benar, Anda harus memperbaikinya. Untuk memperbaiki koneksi yang kacau dalam proyek ke MDF. Jawaban singkat; buat ulang dan hapus dengan benar.
update-database -force
[Gunakan kekuatan jika perlu]Selesai, nikmati db baru Anda
PEMBARUAN 11/12/14 - Saya menggunakan ini sepanjang waktu ketika saya melakukan perubahan db yang melanggar. Saya menemukan ini adalah cara yang bagus untuk mengembalikan migrasi Anda ke db asli:
Jalankan migrasi normal untuk mengembalikannya ke saat ini
Update-Database -TargetMigration:0 -force
[Ini akan menghancurkan semua tabel dan semua data.]Update-Database -force
[gunakan kekuatan jika perlu]sumber
Ini bekerja untuk saya:
sumber
Sementara pertanyaan ini didasarkan pada tidak peduli tentang data, terkadang pemeliharaan data sangat penting.
Jika demikian, saya menulis daftar langkah-langkah tentang cara memulihkan dari mimpi buruk Entity Framework ketika database sudah memiliki tabel dengan nama yang sama di sini: Cara memulihkan dari mimpi buruk Entity Framework - database sudah memiliki tabel dengan nama yang sama
Tampaknya ... seorang moderator melihat cocok untuk menghapus posting saya jadi saya akan menempelkannya di sini:
Bagaimana memulihkan dari mimpi buruk Entity Framework - database sudah memiliki tabel dengan nama yang sama
Deskripsi : Jika Anda seperti kami saat tim Anda baru di EF, Anda akan berakhir dalam keadaan di mana Anda tidak dapat membuat basis data lokal baru atau Anda tidak dapat menerapkan pembaruan ke basis data produksi Anda. Anda ingin kembali ke lingkungan EF yang bersih dan tetap berpegang pada dasar-dasar, tetapi Anda tidak bisa. Jika Anda membuatnya berfungsi untuk produksi, Anda tidak dapat membuat db lokal, dan jika Anda membuatnya berfungsi untuk lokal, server produksi Anda menjadi tidak sinkron. Dan akhirnya, Anda tidak ingin menghapus data server produksi.
Gejala : Tidak dapat menjalankan Update-Database karena mencoba menjalankan skrip pembuatan dan database sudah memiliki tabel dengan nama yang sama.
Latar Belakang Masalah : EF memahami di mana basis data saat ini dibandingkan dengan di mana kode berada di berdasarkan tabel dalam basis data yang disebut dbo .__ MigrationHistory. Ketika melihat Skrip Migrasi, ia mencoba untuk melakukan rekonsiliasi di tempat terakhir dengan skrip. Jika tidak bisa, itu hanya mencoba menerapkannya secara berurutan. Ini berarti, ini akan kembali ke skrip pembuatan awal dan jika Anda melihat bagian paling pertama dalam perintah UP, itu akan menjadi CreeateTable untuk tabel di mana kesalahan terjadi.
Untuk memahami ini secara lebih terperinci, saya sarankan menonton kedua video yang dirujuk di sini: https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Solusi : Yang perlu kita lakukan adalah menipu EF agar berpikir bahwa basis data saat ini mutakhir tanpa menerapkan perintah CreateTable ini. Pada saat yang sama, kami masih menginginkan perintah-perintah itu ada sehingga kami dapat membuat basis data lokal baru.
Langkah 1: Produksi DB bersih Pertama, buat cadangan db produksi Anda. Di SSMS, Klik kanan pada database, Pilih "Tugas> Ekspor aplikasi data-tier ..." dan ikuti petunjuknya. Buka basis data produksi Anda dan hapus / jatuhkan tabel .__ MigrationHistory.
Langkah 2: Lingkungan lokal bersih Buka folder migrasi Anda dan hapus. Saya berasumsi Anda bisa mendapatkan ini semua dari git jika perlu.
Langkah 3: Buat Kembali Inisial Dalam Package Manager, jalankan "Enable-Migrations" (EF akan meminta Anda untuk menggunakan -ContextTypeName jika Anda memiliki banyak konteks). Jalankan "Add-Migration Initial -verbose". Ini akan Membuat skrip awal untuk membuat basis data dari awal berdasarkan kode saat ini. Jika Anda memiliki operasi seed di Configuration.cs sebelumnya, salin itu ke seberang.
Langkah 4: Trick EF Pada titik ini, jika kita menjalankan Update-Database , kita akan mendapatkan kesalahan aslinya. Jadi, kita perlu menipu EF agar berpikir itu mutakhir, tanpa menjalankan perintah ini. Jadi, masuk ke metode Naik dalam migrasi awal yang baru saja Anda buat dan komentar semuanya.
Langkah 5: Perbarui-Basis Data Tanpa kode untuk dijalankan pada proses Naik, EF akan membuat tabel dbo .__ MigrationHistory dengan entri yang benar untuk mengatakan bahwa ia menjalankan skrip ini dengan benar. Pergi dan periksa jika Anda suka. Sekarang, batalkan komentar kode itu dan simpan. Anda dapat menjalankan Pembaruan-Database lagi jika Anda ingin memastikan bahwa EF menganggapnya sebagai yang terbaru. Itu tidak akan menjalankan langkah Atas dengan semua perintah CreateTable karena itu berpikir sudah melakukan ini.
Langkah 6: Pastikan EF benar-benar terkini. Jika Anda memiliki kode yang belum menerapkan migrasi, ini yang saya lakukan ...
Jalankan "Add-Migration MissingMigrations" Ini akan membuat skrip kosong secara praktis. Karena kode sudah ada di sana, sebenarnya ada perintah yang benar untuk membuat tabel ini di skrip migrasi awal, jadi saya hanya memotong perintah drop CreateTable dan setara ke dalam metode Atas dan Bawah.
Sekarang, jalankan Update-Database lagi dan saksikan itu mengeksekusi skrip migrasi baru Anda, membuat tabel yang sesuai dalam database.
Langkah 7: Konfirmasikan kembali dan komit. Bangun, uji, jalankan. Pastikan semuanya berjalan kemudian lakukan perubahan.
Langkah 8: Biarkan seluruh tim Anda tahu cara melanjutkan. Ketika orang berikutnya memperbarui, EF tidak akan tahu apa yang menimpanya mengingat skrip yang telah dijalankan sebelumnya tidak ada. Tetapi, dengan asumsi bahwa basis data lokal dapat dihancurkan dan dibuat kembali, ini semua baik. Mereka harus membuang basis data lokal mereka dan menambahkan membuatnya dari EF lagi. Jika mereka memiliki perubahan lokal dan migrasi yang tertunda, saya akan merekomendasikan mereka membuat DB lagi pada master, beralih ke cabang fitur mereka dan membuat kembali skrip migrasi dari awal.
sumber
Hanya ingin menambahkan jawaban sempurna @Lin:
5) B. Jika Anda tidak memiliki SQL Management Studio, buka "SQL Server Object Explorer". Jika Anda tidak dapat melihat proyek db di localdb "SQL Server Object Explorer", lalu klik tombol "Add SQL server" untuk menambahkannya ke daftar secara manual. Kemudian Anda dapat menghapus db dari daftar.
sumber
Kemungkinan perbaikan yang sangat sederhana yang berhasil untuk saya. Setelah menghapus referensi dan koneksi database yang Anda temukan di server / serverobject explorer, klik kanan folder App_Data (tidak menunjukkan objek apa pun di dalam aplikasi untuk saya) dan pilih buka. Setelah terbuka masukkan semua database / etc. file dalam folder cadangan atau jika Anda memiliki nyali hanya menghapusnya. Jalankan aplikasi Anda dan itu harus membuat ulang semuanya dari awal.
sumber
Solusi saya paling cocok untuk :
- menghapus file mdf Anda
- ingin membuat ulang db Anda.
Untuk membuat ulang basis data Anda, Anda perlu menambahkan koneksi menggunakan Visual Studio.
Langkah 1 : Buka Server Explorer tambahkan koneksi baru (atau cari ikon add db).
Langkah 2 : Ubah Datasource ke File Database Microsoft SQL Server .
Langkah 3 : tambahkan nama database apa pun yang Anda inginkan di bidang Nama file database . (Lebih disukai nama yang sama dengan yang Anda miliki di atribut web.config AttachDbFilename )
Langkah 4 : klik browse dan arahkan ke tempat yang Anda inginkan.
Langkah 5 : di perintah menjalankan konsol paket manajer
update-database
sumber