2013-10-23 13 views
10

Ne yapıyorum yanlış. Ben bir kullanıcı DbContext kurulum var ve ilk olarak powershell ile ilk Code-First oluşturduğumda çalışıyor.EntityFramework 6.0 CreateDatabaseIfNotExists Kodu oluşturmak için kod ilk olarak

Veritabanı başlatıcıyı, uygulama başlangıcında beklendiği gibi uyguladım. Gerçekten ben aslında veritabanını düştü veritabanı oluşturur ve şimdi veritabanı oluşturulmaz şaşırıp eğer

Database.SetInitializer<UserDbContext>(new CreateDatabaseIfNotExists<UserDbContext>()); 

Sadece test etmek. SQL Server 2012 kullanıyorum, neyin yanlış olabileceği hakkında bir fikir.

alıyorum hata mesajı Paket Yöneticisi konsolundan aynı çalıştık

System.InvalidOperationException: Migrations is enabled for context 'UserDbContext' but the database does not exist or contains no mapped tables. Use Migrations to create the database and its tables, for example by running the 'Update-Database' command from the Package Manager Console. 

ve hala bana aynı mesajı verecek mi.

cevap

14

'da açıklanan yöntemi kullanıyorum. Sonunda, çözümleri neden, neden ya da ne olduğundan emin değilim. Veritabanı başlatıcıyı CreateDatabaseIfNotExists yerine MigrateDatabaseToLatestVersion olarak değiştirdim.

Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>()); 
+1

Aynı sayfaya bakıyorum db oluşturma hakkında sorun. Bu çizgiyi nereye koydun? Configuration.cs dosya 'public Configuration()'? Çünkü onu yerleştirdiğim yer burasıydı ve her zaman "update-database" komutunu çalıştırdığımda 2013'e çarptı. senden duymayı seviyorum. – Yustme

+0

@Yustme, konu oldukça eskidir, ancak kayıt için 'Contizer' yapıcısında 'initializer'ı yapılandırırsınız. – Akbari

2

Düzenleme: Yeni hata iletinizle sorun, geçişi etkinleştirmeniz ve zaten bir geçiş (büyük olasılıkla veritabanının ilk oluşturulması) ve DB'yi bıraktığınız geçiş tarihinin kaybolmasından kaynaklanmaktadır. Otomatik geçişleri kullanmıyorsanız, veritabanına girip kendi kendinize değişiklik yapamazsınız ve kodun ilk önce bunu bilmesini bekleyebilirsiniz. Taşıma işlemlerini devre dışı bırakmayı ve bunların geçiş geçmişini temizleyip temizlemediğini görmelerini yeniden etkinleştirmeyi deneyin. B DB'ye başlangıçta oluşturulacak bir veri veya veri eki olarak bir çağrı yapmanız gerekecektir. Kullandığınız kod, EF'i bulmaya çalıştığında var olmayan bir veritabanını nasıl ele alacağını söyler. Benim için, http://www.codeproject.com/Tips/411288/Ensure-Your-Code-First-DB-is-Always-Initialized

+0

Yanıtınız için teşekkür ederiz. Denedim hala işe yaramıyor. – Sanj

+0

Benim için çalıştı, daha fazla fikir için DB başlatmak için farklı yöntemler hakkında bu SO bakın: http://stackoverflow.com/questions/12724320/forcing-code-first-to-always-initialize-a-non- varolan-veritabanı – Matthew

+0

Merhaba Kartal, Seni takip ettim ve hemen hemen her şeye sahip oldum. Otomatik geçişleri kullanıyorum ve Göçler geçmişi kullanıyorum, veritabanının kendisinde saklı tutuluyor mu? Yoksa resmin büyük bir kısmını burada özlüyorum. Veritabanını yeniden oluşturmalı, DB başlatma kuralı ile Otomatik Geçiş etkinleştirilmiş bir veritabanını bir veritabanını silin. Hala hayır şans .... – Sanj

İlgili konular