2012-03-14 5 views
19

हमने हाल ही में एंटीटी फ्रेमवर्क डेटा माइग्रेशन पर स्विच किया है और मैं अपने एमवीसी ऐप के लिए कुछ बिल्ड ऑटोमेशन स्क्रिप्ट पर काम कर रहा हूं। 4.3में migrate.exe उपकरण का उपयोग करके मैं अपने बिल्ड सर्वर से माइग्रेशन सफलतापूर्वक चला सकता हूं यदि मेरे पास Web.config को इंगित करने के लिए है। आदेश लग रहा है कि:वेब/App.config के बिना रनिंग एंटिटी फ्रेमवर्क migrate.exe उपकरण के लिए सही प्रारूप क्या है?

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 

हालांकि, विभिन्न कारणों के लिए मैं Web.config का उपयोग कर से बचने के लिए और सिर्फ प्रवास के समय में सही कनेक्शन स्ट्रिंग में पारित चाहते हैं

यह काम नहीं करता है। इससे भी बदतर, यह nullReferenceException के साथ migrate.exe को क्रैश करता है। कनेक्शन स्ट्रिंग एक जैसा है जिसे हम अपने Web.config में उपयोग करते हैं।

किसी को भी इससे पहले सामना करना पड़ा? क्या मेरा कनेक्शन स्ट्रिंग प्रारूप गलत है? बग?

उत्तर

23

ठीक है, हमने इसे समझ लिया। जब Web.config बिना चल रहा है, connectionProviderName पैरामीटर भी में पारित किया जाना चाहिए:

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 

मैंने पुष्टि की है कि यह काम करता है।

+2

+1 एक लापता पैरामीटर के लिए एक NullPointerException हो रही है अभी भी गलत है, हालांकि - मुझे यकीन है कि वहाँ एफई के लिए एक कनेक्ट साइट है, तो नहीं कर रहा हूँ, लेकिन अगर वहाँ उन्हें रिपोर्ट करें कि! धन्यवाद! – Rup

12

मुझे अभी तक कोई समाधान नहीं मिला है जो वास्तव में वेब/app.config फ़ाइल निर्दिष्ट किए बिना काम करता है। निचे देखो।

हालांकि, यदि आप वेब/app.config प्रदान करने और कनेक्शन स्ट्रिंग को कमांड लाइन पैरामीटर के रूप में ओवरराइड करने के लिए स्वीकार कर सकते हैं, तो निम्नलिखित एंटीटी फ्रेमवर्क 5.0 nuget और .NET 4.5 के साथ निम्न कार्य करता है। documented workarounds के साथ .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 

समाधान की समाप्ति।


विन्यास फाइल को छोड़ने का:

विन्यास फाइल को छोड़ करने की कोशिश कर रहे हैं, तो मैं हमेशा निम्न अपवाद कोई फर्क नहीं पड़ता कि मैं क्या करने की कोशिश की हो गया। मैंने ईएफ 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. 
+0

मैंने ठीक वही किया है जैसा आपने यहां किया है, लेकिन मुझे आपकी "त्रुटि: एक आवेदक के लक्ष्य द्वारा अपवाद को फेंक दिया गया है" वैसे भी, समान स्टैक ट्रेस के साथ। Migrate.exe वास्तव में गुणवत्ता का सबसे कम लगता है। – bwerks

+0

लगता है कि सापेक्ष पथ के साथ कुछ समस्या है। http://stackoverflow.com/questions/28724546/cant-run-code-first-migrations-using-migrate-exe/29853289#29853289 – thepaulpage

+0

मुझे एक ही समस्या थी, लेकिन यह मेरा कोड (कॉन्फ़िगरेशन प्रबंधक के माध्यम से) बन गया। कनेक्शन स्ट्रिंग्स) ईएफ की बजाय जिसके लिए एक डमी कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होती है। मेरा सुझाव है कि यह एक डबल चेक करता है। –

संबंधित मुद्दे