2012-12-11 21 views
7

Uygulamamda SQL Azure veritabanı ile EF geçişlerini kullanıyorum. SQL Azure'da bir tabloyu el ile bırakana kadar iyi çalışıyordu. Artık uygulamanızı yayınladığımda, SQL Azure'da masa bırakılan tablo oluşturulmuyor. Bu aldığım hatadır.SQL Azure tablosu EF Migrations ile oluşturulmadı

Cannot find the object "dbo.TableName" because it does not exist 
or you do not have permissions. 

Veritabanıyla modelim arasında bazı tutarsızlıklar yaratmış gibi hissediyorum.

Otomatik geçişler kullanıyorum.

cevap

4

Başlamak için tabloyu neden sildiniz? Yeniden oluşturulmasını istiyor musunuz?

Daha zorlu çözümlere girmeden önce, tablonuzun içinde oluşturduğu kayıttan önceki geçişe dönmek için -TargetMigration seçeneğini kullanmayı denediniz mi? Orada olmayan bir tabloyu veya fk dizinini silmeye çalışmakla ilgili SQL hataları alacağınıza dair bir his var, ama bu bir şeye değer. Bu komutu update-database -TargetMigration YourOldMigration kullanarak yapabilirsiniz. Bu, taşıma dosyalarınızın Down() yöntemlerinde bulunan komutları çalıştırarak hedef geçişinizden sonra uygulanan tüm geçişleri geri alır. SQL hataları alıyorsanız, hataları önlemek için içeriği Down() yöntemlerini değiştirmeyi deneyebilirsiniz. Dikkatli. Bu veri kaybına neden olabilir. EF sizi bu konuda uyarırsa ve umursamıyorsanız. Komutunuzu sonuna kadar -Force eklemeyi deneyin.

Alternatif ve ek olarak

....

Kişisel göçler sadece DBContext/modelleri için db düzenini karşılaştırarak hesaplanmaz. Sql azure veritabanınızı sql server management stüdyosunda açarsanız __MigrationHistory adında bir tablo görmelisiniz. Otomatik geçişlerle db'nize uygulanan tüm geçişleri depolar.

Başlamadan önce lütfen yol boyunca devam edin. Atlamadan önce düşünmek isteyeceğiniz bazı faktörler vardır. Zaten bunu manipüle etmediğinizi varsayarak, orijinal olarak tablonuzu oluşturan değişiklik kümesi için bir satır bulabilmeniz gerekir. Bu satırı sil. Artık EF otomatik geçişleri, bu değişikliğin henüz DB'nize uygulanmadığını düşünecek. Güncelleme veritabanını çalıştırırsanız tekrar denemeli ve yeniden çalıştırmalısınız.

Bu geçiş dosyasında başka değişiklikler olsaydı, bunları da yeniden deneyecek. Bu, her türlü sql hatasına neden olabilir. Muhtemelen bu geçişin bir parçası olan tüm değişiklikleri manuel olarak geri almak isteyeceksiniz. Veri kaybı konusunda endişeli misiniz? Bitirdikten sonra saklamak için verileri elle oluşturulmuş bir tabloya kopyalamayı deneyin. Göçleri çalışmaya geçirdikten sonra, verileri yeni tablolarınıza/sütunlarınıza geri kopyalayabilirsiniz.

Çift alternatif. Çok fazla gelişime sahip değilseniz ve veri kaybıyla ilgili çok fazla endişeniz yoksa, tüm veritabanını bırakmak ve otomatik geçişlerin sıfırdan yeniden oluşturmasına izin vermek daha kolay olabilir.

Sizi oraya götürecek umuyor