migrate.exe kullanma

Code First Migrations, visual studio içinden bir veritabanını güncelleştirmek için kullanılabilir, ancak migrate.exekomut satırı aracı aracılığıyla da yürütülebilir. Bu sayfa, migrate.exe kullanarak bir veritabanına geçişleri yürütmeye yönelik hızlı bir genel bakış sağlar.

Uyarı

Bu makalede, temel senaryolarda Code First Migrations'ın nasıl kullanılacağını bildiğiniz varsayılır. Aksi takdirde devam etmeden önce Code First Migrations'ı okumanız gerekir.

Copy migrate.exe

Entity Framework'ü NuGet kullanarak yüklediğinizde migrate.exe indirilen paketin araçlar klasöründe olacaktır. <Proje klasöründe>\packages\EntityFramework.<version>\tools

migrate.exe’yi aldıktan sonra, bunu geçişleri içeren derlemenin konumuna kopyalamanız gerekir.

Uygulamanız 4.5 değil de .NET 4'i hedef alıyorsa, Redirect.config konumuna kopyalamanız ve migrate.exe.configyeniden adlandırmanız gerekir. Böylece migrate.exe, Entity Framework derlemesini bulabilmek için doğru bağlama yeniden yönlendirmelerini alır.

.NET 4.5 .NET 4.0
.NET 4.5 Dosyaları .NET 4.0 Dosyaları

Uyarı

migrate.exe x64 derlemelerini desteklemez.

migrate.exe doğru klasöre taşıdıktan sonra, veritabanına geçişleri yürütmek için bunu kullanabilmeniz gerekir. Tüm yardımcı program, geçişleri yürütmek için tasarlanmıştır. Geçiş oluşturamaz veya SQL betiği oluşturamaz.

Bkz. seçenekler

Migrate.exe /?

Yukarıdaki listede bu yardımcı programla ilişkilendirilmiş yardım sayfası görüntülenir. Bunun çalışması için EntityFramework.dll migrate.exe çalıştırdığınız konumda olması gerektiğini unutmayın.

En son sürüme geçiş

Migrate.exe MyMvcApplication.dll /startupConfigurationFile="..\\web.config"

migrate.exe çalıştırılırken, çalıştırmaya çalıştığınız geçişleri içeren derleme tek zorunlu parametredir. Ancak, yapılandırma dosyasını belirtmezseniz tüm kural tabanlı ayarları kullanır.

Belirli bir geçiş sürecine geçme

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /targetMigration="AddTitle"

Geçişleri belirli bir geçişe kadar çalıştırmak istiyorsanız, geçişin adını belirtebilirsiniz. Bu, belirtilen geçişe gelene kadar önceki tüm geçişleri gerektiği gibi çalıştırır.

Çalışma dizini belirtme

Migrate.exe MyApp.exe /startupConfigurationFile="MyApp.exe.config" /startupDirectory="c:\\MyApp"

Derlemeniz bağımlılıklara sahipse veya çalışma dizinine göre dosyaları okuyorsa startupDirectory'yi ayarlamanız gerekir.

Kullanılacak geçiş yapılandırmasını belirtme

Migrate.exe MyAssembly CustomConfig /startupConfigurationFile="..\\web.config"

DbMigrationConfiguration'dan devralan sınıflar olan birden çok geçiş yapılandırma sınıfınız varsa, bu yürütme için hangi sınıfın kullanılacağını belirtmeniz gerekir. Bu, yukarıdaki gibi bir anahtar olmadan isteğe bağlı ikinci parametre sağlanarak belirtilir.

Bağlantı dizesini sağla

Migrate.exe BlogDemo.dll /connectionString="Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI" /connectionProviderName="System.Data.SqlClient"

Komut satırında bir bağlantı dizesi belirtmek istiyorsanız sağlayıcı adını da sağlamanız gerekir. Sağlayıcı adı belirtilmemesi özel duruma neden olur.

Yaygın Sorunlar

Hata mesajı Çözüm
İşlenmeyen Özel Durum: System.IO.FileLoadException: 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' dosyası veya derlemesi ya da bunlardan birinin bağımlılıkları yüklenemedi. Bulunan derlemenin manifesto tanımı, derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040) Bu genellikle Redirect.config dosyası olmadan bir .NET 4 uygulaması çalıştırdığınız anlamına gelir. Redirect.config migrate.exe ile aynı konuma kopyalamanız ve migrate.exe.configolarak yeniden adlandırmanız gerekir.
İşlenmeyen Hata: System.IO.FileLoadException: 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' dosyası veya derlemesi ya da bağımlılıklarından biri yüklenemedi. Bulunan derlemenin bildirim tanımı derleme referansıyla eşleşmiyor. (HRESULT istisnası: 0x80131040) Bu özel durum, migrate.exe konuma kopyalanan Redirect.config ile bir .NET 4.5 uygulaması çalıştırdığınız anlamına gelir. Uygulamanız .NET 4.5 ise, yeniden yönlendirmeleri içeren yapılandırma dosyasının içinde olması gerekmez. migrate.exe.config dosyasını silin.
HATA: Bekleyen değişiklikler olduğundan ve otomatik geçiş devre dışı olduğundan veritabanı geçerli modelle eşleşecek şekilde güncelleştirilemiyor. Bekleyen model değişikliklerini kod tabanlı bir geçişe yazın veya otomatik geçişi etkinleştirin. Otomatik geçişi etkinleştirmek için DbMigrationsConfiguration.AutomaticMigrationsEnabled değerini true olarak ayarlayın. Modelde yapılan değişikliklerle başa çıkmak için bir geçiş oluşturmadığınızda ve veritabanı modelle eşleşmediğinde geçiş çalıştırılıyorsa bu hata oluşur. Bir model sınıfına özellik ekleyip veritabanını yükseltmek için geçiş oluşturmadan migrate.exe çalıştırmak buna bir örnektir.
HATA: 'System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' üyesi için tür çözümlenmedi. Bu hataya yanlış bir başlangıç dizini belirtilmesi neden olabilir. Bu, migrate.exe konumu olmalıdır
İşlenmeyen Özel Durum: System.NullReferenceException: Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
   system.Data.Entity.Migrations.Console.Program.Main(String[] args) adresinde
Bunun nedeni, kullandığınız bir senaryo için gerekli parametrenin belirtilmemesi olabilir. Örneğin, sağlayıcı adını belirtmeden bir bağlantı dizesi belirtme.
HATA: 'ClassLibrary1' derlemesinde birden fazla geçiş yapılandırma türü bulundu. Kullanılacak adı belirtin. Hatada belirtildiği gibi, verilen derlemede birden fazla yapılandırma sınıfı vardır. Hangi anahtarın kullanılacağını belirtmek için /configurationType anahtarını kullanmanız gerekir.
HATA: '<assemblyName>' dosyası veya derlemesi ya da bağımlılıklarından biri yüklenemedi. Verilen derleme adı veya kod tabanı geçersizdi. (HRESULT özel durumu: 0x80131047) Bunun nedeni bir derleme adının yanlış belirtilmesi veya eksik olması olabilir.
HATA: '<assemblyName>' dosyası veya derlemesi ya da bağımlılıklarından biri yüklenemedi. Yanlış biçimde bir program yükleme girişiminde bulunuldu. Bir x64 uygulamasında migrate.exe çalıştırmaya çalışıyorsanız bu durum ortaya çıkar. EF 5.0 ve altı yalnızca x86 üzerinde çalışır.