2012-03-14 16 views
19

Kısa bir süre önce Entity Framework veri geçişlerine geçtik ve MVC uygulamamız için bazı yapı otomasyon scriptleri üzerinde çalışıyorum. Geçiş yapmak için bir Web.config dosyası varsa, geçişlerimizi sunucu sunucumuzdan 4,3 'da migrate.exe aracını kullanarak başarıyla çalıştırabilirim.Web/App.config olmadan Çalışan Entity Framework migrate.exe aracı için doğru biçim nedir?

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly 
    /startupdirectory:ProjectName\bin\Debug 
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose 
:

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly 
    /startupdirectory:ProjectName\bin\Debug 
    /startupconfigurationfile:ProjectName\Web.config 
    /verbose 

Ancak çeşitli nedenlerle ben Web.config kullanmaktan kaçının ve sadece göç sırasında doğru bağlantı dizesinde geçmek istiyorum: komut şey gibi görünüyor

Bu işe yaramıyor. Daha da kötüsü, migrate.exe dosyasını bir NullReferenceException ile kilitler. Bağlantı dizesi, Web.config dosyasında kullandığımızla aynıdır.

Bunu daha önce herkes karşılaştı mı? Bağlantı dizgim formatı yanlış mı? Hata?

cevap

23

Tamam, biz bunu çözdük. Umarım bu işe doğruladı

ProjectName\packages\EntityFramework.4.3.1\tools\migrate.exe MyAssembly 
    /startupdirectory:ProjectName\bin\Debug 
    /connectionProviderName:"System.Data.SqlClient" 
    /connectionString:"Data Source=awesomeserver;Initial Catalog=awesomedatabase;User Id=funkyuser;Password=crazypassword" 
    /verbose 

: Web.config olmadan çalıştırırken, connectionProviderName parametre aynı zamanda geçirilmelidir.

+2

+1 Eksik parametre için bir NullPointerException alınıyor hala yanlış olsa - Ben EF için bir bağlantı sitesi olup olmadığını emin değilim ama varsa onlara o rapor edin! Teşekkürler! – Rup

12

Aslında web/app.config dosyasını belirtmeden çalışan bir çözüm bulmak için henüz. Aşağıya bakınız.

Ancak, bir web/app.config sağlayan ve komut satırı parametreleri, Varlık Çerçeve 5.0 Nuget ve .NET 4.5 ile aşağıdaki eserler olarak bağlantı dizesini geçersiz kılma kabul eğer. Ayrıca documented workarounds ile .NET 4.0 için çalışmalıdır.

örnek dizin yapısı:

trunk\MySolution.sln 
trunk\run_migration.bat 

trunk\MyMvc4App\MyMvc4App.csproj 
trunk\MyMvc4App\web.config 

trunk\MyMvc4App\bin\MyMvc4App.dll 
trunk\MyMvc4App\bin\EntityFramework.dll 

trunk\packages\EntityFramework.5.0.0\tools\migrate.exe 

run_migration.bat: çözelti

SET AssemblyName=MyMvc4App 
SET StartUpDirectory=MyMvc4App\bin\ 
SET ConnectionString=Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True 
SET ConnectionStringProvider=System.Data.SqlClient 
SET ConfigFilePath=%CD%\MyMvc4App\web.config 
SET MigrateExe=packages\EntityFramework.5.0.0\tools\migrate.exe 

%MigrateExe% %AssemblyName%.dll /startUpDirectory:%StartUpDirectory% /startUpConfigurationFile:"%ConfigFilePath%" /connectionProviderName:"%ConnectionStringProvider%" /connectionString:"%ConnectionString%" /verbose 
pause 

sonu. yapılandırma dosyasını belirtilmemesi


: yapılandırma dosyasını ihmal çalışırken Eğer

, hep olursa olsun ne denedim aşağıdaki özel durum var. EF 4.3'ü denemedim, bu yüzden davranışın 4.3 ile 5.0 arasında değiştiğinden şüpheleniyorum.

System.Data.Entity.Migrations.Design.ToolingException: Exception has been thrown by the target of an invocation. 
    at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force) 
    at System.Data.Entity.Migrations.Console.Program.Run() 
    at System.Data.Entity.Migrations.Console.Program.Main(String[] args) 
ERROR: Exception has been thrown by the target of an invocation. 
+0

Tam olarak burada yaptığınız gibi yaptım, ama yine de "HATA: İstisna bir hedefin hedefi tarafından atıldı", aynı yığın iziyle olsun. Migrate.exe gerçekten kalite en düşük gibi görünüyor. – bwerks

+0

Göreceli yollarla ilgili bir sorun var gibi görünüyor. http://stackoverflow.com/questions/28724546/cant-run-code-first-migrations-using-migrate-exe/29853289#29853289 – thepaulpage

+0

Ben benzer bir sorun vardı, ama ConfigurationManager aracılığıyla benim kodu (olduğu ortaya çıktı. Bir taklit yapılandırma dosyası gerektiren EF yerine ConnectionStrings). Bunu bir iki kez kontrol etmenizi öneririm. –