8

हम ईएफ 5 (लोकलबीबी) \ v11.0 (Vstudio 2012) पर कोड-प्रथम माइग्रेशन का उपयोग कर रहे हैं और सबकुछ अब तक अच्छी तरह से काम कर चुका है।स्पष्ट माइग्रेशन (ईएफ 5) (माइग्रेशन लंबित) उत्पन्न करने में असमर्थ

हालांकि - आज मुझे कुछ तालिकाओं पर कुछ इंडेक्स बनाने की आवश्यकता है और समस्याओं में भाग गया।

सबसे पहले मैं प्रधानमंत्री में ऐसा किया: मैं डेटाबेस अद्यतन और परिणाम यह था

public override void Up() 
     { 
      Sql(@"CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages] 
(
    [WtgId] ASC, 
    [StartDateTime] ASC, 
    [EndDateTime] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]"); 
     } 

:

PM> update-database -startupprojectname D3A.Data -force -verbose 
Using StartUp project 'D3A.Data'. 
Using NuGet project 'D3A.Data'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention). 
Applying code-based migrations: [201310301258520_AddIdxToOutage]. 
Applying code-based migration: 201310301258520_AddIdxToOutage. 
CREATE NONCLUSTERED INDEX [idx_WtgId_StartDateTime_EndDateTime] ON [dbo].[Outages] 
(
    [WtgId] ASC, 
    [StartDateTime] ASC, 
    [EndDateTime] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
[Inserting migration history record] 
Running Seed method. 

PM> add-migration AddIdxToOutage 
Scaffolding migration 'AddIdxToOutage'. 

मैं करने के लिए scaffolded प्रवास में कोड को संशोधित किया

आईडीएक्स तालिका पर बनाया गया था और सभी खुश थे।

हालांकि - जब मैंने अगली अनुक्रमणिका बनाई, तो मैं समस्याओं में भाग गया। लेकिन WT * - मैं के रूप में

PM> add-migration AddIdxToState 
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301258520_AddIdxToOutage]. Apply the pending explicit migrations before attempting to generate a new explicit migration. 

क्षमा मेरी फ्रेंच एक खाली प्रवास कार्य बनाया?

इस के आसपास कोई रास्ता नहीं लगता है। मैं पहले idx के अलावा माइग्रेशन चरण पर वापस जा सकता हूं, idx'es को फिर से जोड़ सकता हूं और वही बात फिर से होती है।

क्या आप मुझे बता सकते हैं कि मैं यहां क्या खो रहा हूं? मैं क्या गलत कर रहा हूं?

संपादित करें:

मैं शुरू में सोचा था कि मेरी परेशानी डेटाबेस/localdb के खिलाफ कच्चे एसक्यूएल को क्रियान्वित किया गया था, लेकिन यह सब कुछ अब मैं क्या की तरह लगता है पहले ऐड-माइग्रेशन के बाद बंद हो जाता है।

मैं सिर्फ डेटाबेस के लिए एक नई तालिका जोड़ा गया है और यह प्रधानमंत्री कंसोल से एसटीडी-आउट परिणाम है:

PM> add-migration AddMyLoggerTable 
Scaffolding migration 'AddMyLoggerTable'. 
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201310301419063_AddMyLoggerTable' again. 
PM> update-database -startupproject DongEnergy.D3A.Data -verbose 
Using StartUp project 'D3A.Data'. 
Using NuGet project 'D3A.Data'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'D3A.Data.StorageContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention). 
Applying code-based migrations: [201310301419063_AddMyLoggerTable]. 
Applying code-based migration: 201310301419063_AddMyLoggerTable. 
CREATE TABLE [dbo].[MyLoggerTable] (
    [id] [int] NOT NULL, 
    [functionId] [int], 
    [elapsedTime] [bigint], 
    [noOfRecords] [int], 
    [dateCreated] [datetime] DEFAULT getDate() 
) 
[Inserting migration history record] 
Running Seed method. 
PM> add-migration AddMyLoggerTableFunction 
Unable to generate an explicit migration because the following explicit migrations are pending: [201310301419063_AddMyLoggerTable]. Apply the pending explicit migrations before attempting to generate a new explicit migration. 

सूचना कैसे मैं एक नया, रिक्त प्रवास कार्य जोड़ने, createTable-विधि का उपयोग करें और है जो डेटाबेस में सफलतापूर्वक अपडेट किया गया। लेकिन जब मैं एक नया माइग्रेशन चरण जोड़ता हूं, तो यह शिकायत करता है कि डेटाबेस के लिए "प्रतिबद्ध" कार्य अभी भी "लंबित" है - भले ही माइग्रेशन इतिहास और डेटाबेस ऑब्जेक्ट्स दोनों अपडेट किए गए हों।

+0

प्रयास करें:, वापस लाएं अपना माइग्रेशन हटाएँ और इसे पुन:। मुझे कुछ समय "रिक्त" माइग्रेशन के साथ समस्या थी लेकिन उस सरल चाल ने हमेशा ऐसा किया। –

+0

@allo_man, ठीक है, मैंने कोशिश की। मैं माइग्रेशन चरण/पहले/इंडेक्स-निर्माण पर वापस लौट आया। यह ठीक काम किया। फिर मैंने इंडेक्स बनाने के लिए पहला कदम जोड़ा। यह ठीक काम करता है और अद्यतन-डेटाबेस काम करता है जैसे इरादा। जब मैं दूसरी अनुक्रमणिका बनाने के लिए माइग्रेशन जोड़ता हूं, तो यह विफल हो जाता है। –

+0

आपके पहले माइग्रेशन __MigrationHistory तालिका में उसकी प्रविष्टि में बनाया है? – Adrian

उत्तर

8

यह ओपी प्रश्न को हल नहीं कर सकता है, लेकिन जब मैं एक नया डेटाबेस विकसित कर रहा था और डेटाबेस में कोई अद्यतन करने से पहले दो माइग्रेशन जोड़ने की कोशिश की तो मुझे एक ही समस्या थी।

मेरा समाधान मेरा आवेदन चलाने के लिए था ताकि लंबित माइग्रेशन डेटाबेस अपडेट कर सके। एप्लिकेशन MigrateDatabaseToLatestVersion की सहायता से डेटाबेस को स्वचालित रूप से अपडेट करता है। यह पैकेज प्रबंधक कंसोल से Update-Database टाइप करके भी पूरा किया जा सकता है।

यदि कोई माइग्रेशन जोड़ा जाता है और अधिक परिवर्तन किए जाते हैं जिन्हें उसी माइग्रेशन में जोड़ा जाना चाहिए, तो इसे हटाने और इसे फिर से जोड़ने की आवश्यकता नहीं है (जिसे मैंने पहले करने की कोशिश की थी)। आप मौजूदा लंबित माइग्रेशन को अपडेट कर सकते हैं, पैकेज प्रबंधक कंसोल (मेरे द्वारा जोर) से ऐड-माइग्रेशन टूल चलाते समय सहायता प्रदर्शित होती है।

इस माइग्रेशन फ़ाइल के लिए डिज़ाइनर कोड में आपके वर्तमान कोड प्रथम मॉडल का एक स्नैपशॉट शामिल है। जब आप अगली माइग्रेशन को मचान करते हैं तो यह स्नैपशॉट आपके मॉडल में किए गए परिवर्तनों की गणना करने के लिए उपयोग किया जाता है। आप अपने मॉडल में अतिरिक्त परिवर्तन है कि आप इस प्रवास में शामिल करना चाहते हैं करते हैं, तो आप फिर से पाड़ कर सकते हैं यह 'ऐड-प्रवासन [टाइमस्टैम्प] _MigrationName' फिर से चलाकर।

दूसरे शब्दों में, लंबित ऑपरेशन के समान आईडी के साथ एड-माइग्रेशन टूल चलाएं, और नए बदलाव पुराने के साथ विलय हो जाएंगे। यदि आप देखते हैं कि परिवर्तन विलय नहीं किए गए हैं, तो आप टिप्पणियों में एंथनी-अर्नोल्ड नोट्स के रूप में माइग्रेशन को मजबूर करने के लिए -F ध्वज (Add-Migration <Name> -Force में) का उपयोग कर सकते हैं।

+20

'-फोर्स', ल्यूक का प्रयोग करें। – Anthony

2

शायद ज़रुरत किसी को भी मैं में भाग "एक स्पष्ट प्रवास उत्पन्न करने के लिए है क्योंकि निम्न स्पष्ट माइग्रेशन लंबित हैं असमर्थ ..." त्रुटि के बाद मैं Configuration.cs फ़ाइल में ContextKey मूल्य बदल रुचि रखता है है। मैंने इसे वापस बदल दिया और मुद्दा दूर चला गया।

+1

यह मेरे प्रोजेक्ट के मामले में भी था। ContextKey बदलने की बजाय वापस मैं इसे मैन्युअल रूप से डेटाबेस में _MigrationHistory तालिका में नया मान करने के लिए समायोजित। इसने समस्या को हल किया। –

4

एक अन्य संभावित कारण है - अगर आप की तरह समाधान में विभिन्न परियोजनाओं है - यूआई और कोर (अपने डाटाबेस विन्यास यहाँ है), तो यकीन है कि माइग्रेशन अपने कोर परियोजना स्टार्टअप परियोजना के रूप में सेट कर दिया जाता है, जबकि चल रहा हो। यह मेरी समस्या हल हो गया। मुबारक कोडिंग :)

+0

पवित्र गाय! यह क्यों काम करता है? धन्यवाद Tonu। – Jess

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