5

Varlık çerçeve başvurum için geçişleri etkinleştirdim. Şimdi, veritabanımı uzak sunucumda güncellemek istiyorum. Bu komutu çalıştırdım: Bir sql betiği oluşturuldu. Ancak, bu betik aslında benim veritabanımda sahip olduğum tüm meta verilere sahiptir ve yapılan değişikliklere değil; Yani, bu sql komut dosyasını uzak sunucumda çalıştırmaya çalıştığımda, tabloların zaten mevcut olduğunu söylüyor.Varlık çerçevesi ve geçişler - veritabanımı uzak sunucuda nasıl güncellerim?

Yalnızca gerekli güncelleştirmeleri içerecek sql komut dosyasını nasıl oluşturabilirim?

cevap

7

Bunun için belirli bir geçişi hedefleyebilirsiniz. Örneğin Foo adında bir göç varsa:

Update-Database -TargetMigration Foo -Script 

O Foo göç için bir geçiş komut dosyası üretecektir. Bu sunucuda çalıştırmak için ihtiyacınız olan taşıma ile Foo'yu değiştirin.

Add-Migration InitialMigration 
Add-Migration AddCustomers 
Add-Migration AddProjects 

Diyelim ki projenizde yukarıdaki üç göçler var ve yerel veritabanı hepsini uygulanan vardır, ama uzak veritabanı sadece InitialMigration olduğunu varsayalım. Aşağıdaki çalıştırabilirsiniz: Bu uzak sunucu (AddCustomers ve AddProjects) üzerinde iki taşıma işlemi uygulanır

Update-Database -SourceMigration InitialMigration -TargetMigration AddProjects -Script 

.

+0

Yalnızca geçişlerimi etkinleştirdim, bu yüzden herhangi bir hedef geçişim yok, bunu elde etmek için önce yerel db'mi güncellemem gerekiyor mu? – ojek

+0

Herhangi bir geçişiniz yoksa, tam olarak ne yapmaya çalışıyorsunuz? – Dismissile

+0

Düzenlemeniz açıktı. Bilgi için teşekkürler! :) – ojek

1

Eğer genellikle [projectFolder] bulunan komut satırı taşıma aracını yürütebileceği sunucuya uzak masaüstü aracılığıyla erişiminiz varsa /packages/EntityFramework.5.0.0/tools/migrate.exe

Ve böyle diyoruz:

Migrate.exe [StartupProjectName] /StartupDirectory:"[BIN folder path]" /ConnectionStringName:"[Connection String Name]" /StartupConfigurationFile:"[Path to web or app.config]" 
1

uygulamanızda yeni bir sürümünü dağıtırken, otomatik herhangi bir yeni göçler uygulamak için MigrateDatabaseToLatestVersion Initializer kullanabilirsiniz:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());