ما هو التنسيق الصحيح لتشغيل أداة Entity Framework migrate.exe بدون Web/App.config؟

StackOverflow https://stackoverflow.com//questions/9705241

سؤال

لقد تحولنا مؤخرًا إلى عمليات ترحيل بيانات Entity Framework وأعمل على بعض البرامج النصية لأتمتة البناء لتطبيق MVC الخاص بنا.يمكنني تشغيل عمليات الترحيل بنجاح من خادم البناء الخاص بنا باستخدام أداة migrate.exe في الإصدار 4.3 إذا كان لدي Web.config للإشارة إليه. يبدو الأمر مثل:

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

ومع ذلك، لأسباب مختلفة، أود تجنب استخدام Web.config وتمرير سلسلة الاتصال الصحيحة في وقت الترحيل:

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

هذا لا يعمل.والأسوأ من ذلك، أنه يتعطل migrate.exe مع NullReferenceException.سلسلة الاتصال مماثلة لتلك التي نستخدمها في Web.config الخاص بنا.

أي شخص واجه هذا من قبل؟هل تنسيق سلسلة الاتصال الخاص بي خاطئ؟حشرة؟

هل كانت مفيدة؟

المحلول

حسنا، لقد احسبنا ذلك.عند التشغيل بدون Web.config، يجب أيضا إقرار المعلمة ConnectionProvidername في:

giveacodicetagpre.

لقد أكدت أن هذا يعمل.

نصائح أخرى

لم أجد بعد حلاً يعمل بالفعل دون تحديد ملف web/app.config.انظر أدناه.

ومع ذلك، إذا كان بإمكانك قبول توفير web/app.config وتجاوز سلسلة الاتصال كمعلمات سطر الأوامر، فإن ما يلي يعمل مع Entity Framework 5.0 nuget و.NET 4.5.يجب أن يعمل أيضًا مع .NET 4.0 مع الحلول الموثقة.

مثال على بنية المجلد:

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:

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

نهاية الحل.


حذف ملف التكوين:

إذا حاولت حذف ملف التكوين، فسأحصل دائمًا على الاستثناء التالي بغض النظر عما حاولت.لم أجرب EF 4.3، لذا أظن أن السلوك تغير بين 4.3 و5.0.

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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top