Bu soru, veriyi önemsememekle ön plana çıksa da, bazen verilerin bakımı önemlidir.
Öyleyse, veritabanı burada aynı ada sahip tablolar olduğunda Entity Framework kabusundan nasıl kurtarılacağına ilişkin adımların bir listesini yazdım: Entity Framework kabusundan nasıl kurtarılır - veritabanı zaten aynı ada sahip tablolar içeriyor
Görünüşe göre ... bir moderatör yazımı silmek için uygun gördü, bu yüzden buraya yapıştıracağım:
Entity Framework kabusundan nasıl kurtarılır - veritabanı zaten aynı ada sahip tablolara sahip
Açıklama : Ekibiniz EF'de yeniyse bizim gibi iseniz, ya yeni bir yerel veritabanı oluşturamayacağınız ya da üretim veritabanınıza güncelleme uygulayamayacağınız bir durumla karşılaşırsınız. Temiz bir EF ortamına geri dönmek ve daha sonra temel özelliklere bağlı kalmak istiyorsunuz, ancak yapamazsınız. Üretim için çalışmaya başlarsanız, yerel bir db oluşturamazsınız ve yerel olarak çalışmasını sağlarsanız, üretim sunucunuz eşitlenmez. Son olarak, üretim sunucusu verilerini silmek istemezsiniz.
Belirti : Oluşturma komut dosyasını çalıştırmaya çalıştığı ve veritabanında zaten aynı ada sahip tablolar olduğu için Update-Database çalıştırılamıyor.
Hata iletisi: System.Data.SqlClient.SqlException (0x80131904): Veritabanında zaten '' adında bir nesne var.
Sorun Arka Plan : EF, veritabanında dbo .__ MigrationHistory adlı bir tabloya dayanarak, kodun bulunduğu konumla karşılaştırıldığında geçerli veritabanının nerede olduğunu anlar. Geçiş Komut Dosyalarına baktığında, komut dosyalarında en son nerede olduğunu yeniden denemeye çalışır. Eğer yapamazsa, onları sırayla uygulamaya çalışır. Bu, ilk oluşturma komut dosyasına geri döner ve UP komutunun ilk bölümüne bakarsanız, hatanın oluştuğu tablo için CreeateTable olacaktır.
Bunu daha ayrıntılı olarak anlamak için, burada belirtilen her iki videoyu da izlemenizi öneririz:
https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Çözüm : Yapmamız gereken şey, EF'yi bu CreateTable komutlarını uygulamadan geçerli veritabanının güncel olduğunu düşünmesi için kandırmaktır. Aynı zamanda, yeni yerel veritabanları oluşturabilmemiz için bu komutların var olmasını istiyoruz.
Adım 1: Üretim DB temiz
Öncelikle, üretim db yedekleyin. SSMS'de, veritabanına sağ tıklayın, "Görevler> Veri katmanı uygulamasını dışa aktar ..." seçeneğini seçin ve komut istemlerini izleyin. Üretim veritabanınızı açın ve dbo .__ MigrationHistory tablosunu silin / bırakın.
Adım 2: Yerel ortam temizleme
Taşıma klasörünüzü açın ve silin. Gerekirse tüm bunları git'ten geri alabileceğinizi varsayıyorum.
Adım 3: İlkini Yeniden
Oluşturun Paket Yöneticisinde "Etkinleştir-Geçişleri" çalıştırın (EF, birden fazla bağlamınız varsa -ContextTypeName kullanmanızı isteyecektir). "Add-Migration Initial -verbose" komutunu çalıştırın. Bu, geçerli koda dayalı olarak sıfırdan veritabanı oluşturmak için ilk komut dosyasını oluşturur. Önceki Configuration.cs dosyasında herhangi bir çekirdek işleminiz varsa, bunu kopyalayın.
Adım 4: Trick EF
Bu noktada, Update-Database'i çalıştırırsak orijinal hatayı alırdık. Bu nedenle, EF'i bu komutları çalıştırmadan güncel olduğunu düşünmesi için kandırmamız gerekir. Bu nedenle, az önce oluşturduğunuz İlk geçişte Yukarı yöntemine gidin ve hepsini yorumlayın.
Adım 5: Güncelleme-Veritabanı
Yukarı işleminde yürütülecek kod olmadan EF, bu betiği doğru çalıştırdığını söylemek için doğru girişle dbo .__ MigrationHistory tablosunu oluşturur. Gidin ve isterseniz kontrol edin. Şimdi, bu kodu uncomment ve kaydedin. EF'in güncelliğini düşündüğünü kontrol etmek istiyorsanız, Güncelleme-Veritabanını tekrar çalıştırabilirsiniz . Yukarı adımını tüm CreateTable komutlarıyla çalıştırmaz, çünkü zaten bunu yaptığını düşünür.
Adım 6: EF'in GERÇEKTEN güncel olduğunu doğrulayın
Henüz henüz taşıma işlemi yapılmamış bir kodunuz varsa, yaptığım şey budur ...
"Add-Migration MissingMigrations" komutunu çalıştırın. Bu, neredeyse boş bir komut dosyası oluşturur. Kod zaten orada olduğundan, aslında ilk geçiş komut dosyasında bu tabloları oluşturmak için doğru komutlar vardı, bu yüzden sadece CreateTable ve eşdeğer drop komutlarını Yukarı ve Aşağı yöntemlerine kestim.
Şimdi, Update-Database'i yeniden çalıştırın ve veritabanında uygun tabloları oluşturarak yeni geçiş komut dosyanızı yürütmesini izleyin.
7. Adım: Yeniden onaylayın ve onaylayın.
Oluşturun, test edin, çalıştırın. Her şeyin çalıştığından emin olun, sonra değişiklikleri yapın.
Adım 8: Ekibinizin geri kalanına nasıl ilerleyeceğini bildirin.
Bir sonraki kişi güncellediğinde, EF daha önce çalıştırdığı komut dosyalarının mevcut olmadığı göz önüne alındığında, onu neyin vurduğunu bilemez. Ancak, yerel veritabanlarının uçurabildiğini ve yeniden oluşturulabileceğini varsayarsak, hepsi iyi. Yerel veritabanlarını bırakmaları ve tekrar EF'den oluşturmaları gerekecek. Yerel değişiklikleri ve bekleyen taşıma işlemleri varsa, DB'lerini yeniden master oluşturmaları, özellik dallarına geçmeleri ve bu taşıma komut dosyalarını sıfırdan yeniden oluşturmaları önerilir.
DROP DATABASE
o zaman ....