2012-02-20 14 views
6

मैंने नई परियोजना बनाई और इसमें नवीनतम इकाई ढांचा जोड़ा (संस्करण 4.3)। मैंने कक्षाओं और संदर्भ को पिछले ईएफ संस्करणों के रूप में बनाया है।इकाई फ्रेमवर्क 4.3 डेटाबेस नहीं बनाता

An error occurred while executing the command definition. See the inner exception for details.

निम्नलिखित भीतरी अपवाद के साथ

:

Invalid object name 'dbo.__MigrationHistory'.

हालांकि, बहुत पहली बार चलाने जब डेटाबेस बनाया जाना चाहिए के दौरान, मैं निम्न त्रुटि प्राप्त कर रहा हूँ (मेरे मामले में यह SQL सर्वर 2005 है)

जैसा कि मैं समझता हूं, यह तालिका माइग्रेशन के लिए है, लेकिन यदि कोई डेटाबेस नहीं है तो यह तालिका मौजूद नहीं है। क्या मुझसे कुछ गलत हो रही है?

और जानकारी:

public class Test 
{ 
    [Key] 
    public int TestId { get; set;} 

    public string Name {get; set;} 
} 

public class Context : DbContext 
{ 
    public Context() : base("MyConnection") 
    { 
    } 

    public DbSet<Test> Tests { get; set;} 
} 

UPDATE 1

कुछ परीक्षण करने के बाद मैंने महसूस किया कि आवेदन दृश्य स्टूडियो से बिना क्रिया का अपवाद फेंकने और दृश्य में तोड़ जाता है: परीक्षण प्रयोजनों के लिए मैं केवल एक श्रेणी का निर्माण स्टूडियो। अपवाद System.Data.EntityCommandExecutionException था। एक बार जब मैंने उस निष्कासन को अनदेखा कर दिया और कोड निष्पादन को रोक नहीं दिया, डेटाबेस बनाया गया था।

अद्यतन 2

डेटाबेस के साथ काम कर एक और कुछ ही घंटों के बाद मुझे पता चला कि यह भी कंसोल से सक्षम-माइग्रेशन विकल्प और अद्यतन-डाटाबेस के साथ खेल कि इस मुद्दे को सुलझाने है। यह एप्लिकेशन शुरू होने से पहले डेटाबेस बना रहा है और विजुअल स्टूडियो में नहीं टूटता है।

+0

कुछ ऐसा लगता है कि सिंक http://stackoverflow.com/questions/3986160/an-error-occurred-while-executing-the-command-definition-see-the-inner-exceptio –

+0

से बाहर है तुम हो मैन्युअल रूप से कक्षाएं बनाई? या आपने विज़ार्ड –

+0

का उपयोग किया है परीक्षण के लिए मैंने टेस्टआईड के साथ टेस्ट नामक केवल एक वर्ग बनाया है [कुंजी] और स्ट्रिंग प्रॉपर्टी नाम कहा जाता है। और कुछ नहीं। – Marcin

उत्तर

3

क्या आप ईएफ को अपनी डिफ़ॉल्ट कनेक्शन स्ट्रिंग का उपयोग करने के लिए अपने कन्स्ट्रक्टर को हटाने का प्रयास कर सकते हैं।

public Context() : base("MyConnection") 
{ 
} 

उसमें असफल होने पर आप पैकेज प्रबंधक कंसोल से अपने डेटाबेस अद्यतन करने की कोशिश कर सकता है अगर आप किसी भी आगे की जानकारी मिलती है देखने के लिए।

Update-Database -Verbose 

संभवतः असंबंधित आपके मामले में, लेकिन मैं जब MvcMiniProfiler 1.9 का उपयोग कर एक ही त्रुटि मिलती है। MiniProfiler App_Start भीतर

//MiniProfilerEF.Initialize(); 

: आप भी इसे प्रयोग कर रहे हैं, तो सुनिश्चित करें एफई रूपरेखा लाइन बाहर टिप्पणी करके बंद कर दिया है बनाते हैं।


एक ऐसी ही समस्या का सामना कर दूसरों के लिए, मैं ने पाया है कि पैकेज प्रबंधक कंसोल से पुनः सक्षम माइग्रेशन कुछ मामलों में कर सकते हैं। यह सुनिश्चित करने से पहले सुनिश्चित करें कि आपके पास माइग्रेशन कॉन्फ़िगरेशन की एक प्रति है।

Enable-Migrations -Force 
+0

अगर केवल कुछ ऐसा था जो आप कथन कर सकते हैं "सुनिश्चित करें कि ऐसा करने से पहले आपके माइग्रेशन कॉन्फ़िगरेशन की एक प्रति है।" स्टैंडआउट और अधिक :) 'कॉन्फ़िगरेशन सीएस' की सभी चीजें इस तरह मिटा दी गई हैं :) –

2

... और बस इसी तरह की समस्या का सामना उन सभी के लिए एक और संभावित जवाब जोड़ने के लिए
(ध्यान दें: इस, एक ओपन एंडेड कहानी लगती है वहाँ के रूप में प्रवास के साथ अभी भी स्पष्ट रूप से कुछ कीड़े हो अंश)... यह लिंक मैं
Error when running Update-Database with EF 4.3 जो चाहते हैं उसे के सबसे करीब आया हां, तो आप 3 काम करने होंगे (इसी क्रम में - और मैं एक मौजूदा परियोजना की चर्चा करते हुए कर रहा हूँ):
(सभी अपराह्न कंसोल में है)

  • सुनिश्चित करें कि पीएम कंसोल में 'डिफ़ॉल्ट प्रोजेक्ट' आपके वांछित प्रोजेक्ट (यानी बड़े समाधानों के लिए) पर सेट है - जो आपके स्टार्टअप प्रोजेक्ट से मेल नहीं खाती है!
  • (1) Enable-Migrations -force
  • (2) Add-Migration Initial
  • (3) Update-Database -Verbose

(और बारीकी से टिप्पणी/करने के लिए कार्रवाई परियोजना आप चाहते हैं पर किए गए थे कि क्या प्रधानमंत्री में प्रतिक्रिया देखना) ... तुम अब भी प्रधानमंत्री console में अपवाद मिलता है

  • (4) तो आप जड़ में 'चाल' अपनी परियोजना की जरूरत हो सकती

यह मूर्खतापूर्ण लगता है मुझे पता है, लेकिन वह मेरी तरफ मुख्य समस्या यह थी - मैं समाधान फ़ोल्डरों का एक समूह और के किसी भी ऊपर समाधान फ़ोल्डर्स में परियोजनाओं पर विफल हो जाएगा था। हालांकि, एक बार मैं जड़ तक परियोजना ले जाया गया, सब कुछ ठीक (कोई और अधिक अपवाद के साथ या w/ओ CLR के लिए पहले मौका अपवाद चालू या बंद) काम किया ...
आशा है कि यह किसी को मदद मिलती है

संपादित करें : यदि आपका डेटा मॉडल प्रोजेक्ट (ईएफ सीएफ) एक लाइब्रेरी है - तो उस प्रोजेक्ट को पीएम कंसोल में 'डिफ़ॉल्ट प्रोजेक्ट' के रूप में सेट करें - और उन सभी चीजों को सीधे उस प्रोजेक्ट पर चलाएं (और माइग्रेशन कॉन्फ़िगरेशन इत्यादि को lib में बनाया गया है) अपने आप)। अन्यथा यह असफल हो जाएगा (और वही कोई माइग्रेशन हिस्ट्री अपवाद तब भी प्रकट होता है जब आपका मॉडल एक lib है - और इसके लिए कोई माइग्रेशन परिभाषित नहीं है - और आपके पास 'मुख्य प्रोजेक्ट' पर माइग्रेशन परिभाषित है)।

संपादित करें: आपको दोनों lib (ईएफ मॉडल) और 'स्टार्टअप' प्रोजेक्ट (इसे कॉल करने) को रूट में स्थानांतरित करने की आवश्यकता होगी।

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