Aracılığıyla paylaş


migrate.exe dosyasını kullanma

Code First Migrations, visual studio içinden bir veritabanını güncelleştirmek için kullanılabilir, ancak migrate.exe komut satırı aracı aracılığıyla da yürütülebilir. Bu sayfada, bir veritabanında geçişleri yürütmek için migrate.exe dosyasının nasıl kullanılacağına ilişkin hızlı bir genel bakış sunulacaktır.

Dekont

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 migrate.exe kullanarak yüklediğinizde, indirilen paketin araçlar klasöründe yer alır. <Proje klasöründe>\packages\EntityFramework.<version>\tools

migrate.exe dosyasını aldıktan sonra bunu geçişlerinizi içeren derlemenin konumuna kopyalamanız gerekir.

Uygulamanız 4.5 değil de .NET 4'i hedef alıyorsa Redirect.config dosyasını da konuma kopyalamanız ve migrate.exe.config olarak yeniden 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 Files .NET 4.0 Files

Dekont

migrate.exe, x64 derlemelerini desteklemez.

Migrate.exe dosyasını doğru klasöre taşıdıktan sonra, veritabanında geçişleri yürütmek için bu klasörü 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 dosyasının migrate.exe dosyasını çalıştırdığınız konumda olması gerektiğini unutmayın.

En son geçişe geçiş

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

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

Belirli bir geçişe geçiş

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ı dizesi sağlama

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.

Sık Karşılaşılan Sorunlar

Hata İletisi Çözüm
İşlenmeyen Özel Durum: System.IO.FileLoadException: 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' dosyası veya derlemesi yüklenemedi veya bağımlılıklarından biri. Bulunan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT özel durumu: 0x80131040) Bu genellikle Redirect.config dosyası olmadan bir .NET 4 uygulaması çalıştırdığınız anlamına gelir. Redirect.config dosyasını migrate.exe ile aynı konuma kopyalamanız ve migrate.exe.config olarak yeniden adlandırmanız gerekir.
İşlenmeyen Özel Durum: System.IO.FileLoadException: 'EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' dosyası veya derlemesi yüklenemedi veya bağımlılıklarından biri. Bulunan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT özel durumu: 0x80131040) Bu özel durum, redirect.config öğesinin migrate.exe konumuna kopyalanmış olduğu 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. Model sınıfına bir özellik ekleyip veritabanını yükseltmek için geçiş oluşturmadan migrate.exe dosyasını ç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 dosyasının 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
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 dosyasını çalıştırmaya çalışıyorsanız bu durum ortaya çıkar. EF 5.0 ve altı yalnızca x86 üzerinde çalışır.