2012-03-06 11 views
6

मुझे एंटीटी फ्रेमवर्क 4.3 के कोड फर्स्ट माइग्रेशन का उपयोग करते समय कई अनचाहे अपवाद मिल रहे हैं।एंटिटी फ्रेमवर्क कोड के लिए अपवाद पहले माइग्रेशन

डेटाबेस संदर्भ:

public class MyAppContext : DbContext 
{ 
    public DbSet<Branch> Branches { get; set; } 

    public MyAppContext() 
    { } 
} 

इकाई:

public class Branch : IEntity<Guid> 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool Active { get; set; } 
} 

डेटाबेस प्रारंभकर्ता:

public class MyAppInitializer : CreateDatabaseIfNotExists<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     context.Branches.Add(new Branch() { Id = branchId, Name = "Acme", Description = "Acme", Active = true }); 
     context.SaveChanges(); 
    } 
} 

मैं अपने DAL परियोजना और MVC परियोजना का उपयोग करने के इकाई की रूपरेखा 4.3 स्थापित:

स्थापित-पैकेज EntityFramework

मैं स्टार्टअप परियोजना के रूप में MVC परियोजना की स्थापना की और डेटाबेस संदर्भ और प्रारंभकर्ता साथ दाल परियोजना के लिए निम्न आदेश निष्पादित:

PM> सक्षम-माइग्रेशन -वर्बोस

NuGet प्रोजेक्ट 'Ckms.KeyManagement.Managers' का उपयोग करना। संदर्भ प्रकार की खोज करते समय त्रुटि (निर्दिष्ट करें - अपवाद विवरण देखने के लिए वर्बोज़)। System.Data.Entity.Migrations.Design.ToolingException: अनुरोधित प्रकारों में से एक या अधिक लोड करने में असमर्थ। अधिक जानकारी के लिए लोडरएक्सेप्शंस संपत्ति पुनर्प्राप्त करें। System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
पर System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner धावक) System.Data.Entity.Migrations.MigrationsCommands पर पर .FindContextToEnable() पर संदर्भ निर्दिष्ट करने के लिए जेनरेट किए गए कॉन्फ़िगरेशन क्लास को संपादित करें के लिए माइग्रेशन सक्षम करें। कोड पहले माइग्रेशन प्रोजेक्ट Ckms.KeyManagement.Managers के लिए सक्षम है।

डीबीएमग्रेशन कॉन्फ़िगरेशन बाल वर्ग डीएएल प्रोजेक्ट में जोड़ा जाता है। मैं मैन्युअल DbContext के प्रकार जोड़ सकते हैं और स्वचालित माइग्रेशन सक्षम करते हैं:

internal sealed class Configuration : DbMigrationsConfiguration<MyAppContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(MyAppContext context) 
    { } 
} 

ये अपवाद ऐड-प्रवासन के लिए फेंक दिया जाता है और अद्यतन-डाटाबेस आदेश:

PM> एड-प्रवासन TestEFMigrationsColumn -verbose

NuGet प्रोजेक्ट 'Ckms.KeyManagement.Managers' का उपयोग करना। स्टार्टअप प्रोजेक्ट 'का उपयोग करना। सिस्टम। रिफ्लेक्शन। लक्ष्यइन्वेशन अपवाद: अपवाद के लक्ष्य से अपवाद फेंक दिया गया है। ---> सिस्टम। ऑर्ग्यूमेंट अपवाद: पैरामीटर गलत है। (HRESULT से अपवाद: 0x80070057 (E_INVALIDARG)) --- आंतरिक अपवाद स्टैक ट्रेस का अंत --- सिस्टम पर .RuntimeType.InvokeDispMethod (स्ट्रिंग नाम, बाइंडिंगफ्लैग invokeAttr, ऑब्जेक्ट लक्ष्य, ऑब्जेक्ट [] args, बूलियन [] byrefModifiers , इंट 32 संस्कृति, स्ट्रिंग [] नाम पैरामीटर) सिस्टम पर। रनटाइम टाइप।InvokeMember (स्ट्रिंग नाम, BindingFlags BindingFlags, बाइंडर बांधने की मशीन, वस्तु लक्ष्य, वस्तु [] providedArgs, ParameterModifier [] संशोधक, CultureInfo संस्कृति, String [] namedParams) System.Management.Automation.ComMethod.InvokeMethod (PSMethod विधि में, ऑब्जेक्ट [] तर्क) आमंत्रण के लक्ष्य से अपवाद को फेंक दिया गया है।

अद्यतन-डेटाबेस:

PM> अद्यतन-डाटाबेस -verbose

NuGet परियोजना 'Ckms.KeyManagement.Managers' का उपयोग करना। स्टार्टअप प्रोजेक्ट 'का उपयोग करना। सिस्टम। रिफ्लेक्शन। लक्ष्यइन्वेशन अपवाद: अपवाद के लक्ष्य से अपवाद फेंक दिया गया है। ---> सिस्टम। ऑर्ग्यूमेंट अपवाद: पैरामीटर गलत है। (HRESULT से अपवाद: 0x80070057 (E_INVALIDARG)) --- भीतरी अपवाद स्टैक ट्रेस की समाप्ति --- System.RuntimeType.InvokeDispMethod (स्ट्रिंग नाम पर, BindingFlags invokeAttr, वस्तु लक्ष्य, वस्तु [] args, बूलियन [] byrefModifiers , Int32 संस्कृति, String [] namedParameters) System.RuntimeType.InvokeMember (स्ट्रिंग नाम पर, BindingFlags BindingFlags, बाइंडर बांधने की मशीन, वस्तु लक्ष्य, वस्तु [] providedArgs, ParameterModifier [] संशोधक, CultureInfo संस्कृति, String [] namedParams) सिस्टम पर। प्रबंधन .Automation.ComMethod.InvokeMethod (PSMethod विधि, ऑब्जेक्ट [] तर्क) आमंत्रण के लक्ष्य से अपवाद को फेंक दिया गया है।

कोई विचार? त्रुटि संदेश वास्तव में सहायक नहीं हैं। मैंने Nuget कमांड को मौजूदा डेटाबेस के साथ और बिना कोशिश की है।

उत्तर

12

आप डेटा का उपयोग के लिए अलग से लाइब्रेरी का उपयोग कर रहे हैं, तो आप इसे नाम जब क्वेरी चलाने प्रदान करने की आवश्यकता: "आपका दाल परियोजना" MyNewMigration

अद्यतन-डाटाबेस

ऐड-प्रवासन -StartUpProjectName -StartUpProjectName "आपका दाल परियोजना" -verbose

+1

यह हल नहीं करता है मुझे डर है। यदि मैं कमांड पर StartUpProjectName तर्क जोड़ता हूं, तो निम्न त्रुटि उठाई जाती है: System.Reflection.ReflectionTypeLoadException: अनुरोधित प्रकारों में से एक या अधिक लोड करने में असमर्थ। –

+1

क्या आपके पास डीएलएल कॉन्फ़िगरेशन में उचित सेटिंग्स हैं। मेरा मतलब है कॉन्फ़िगरेशन सेक्शन, एसक्यूएल कनेक्शन इत्यादि – Marcin

+2

यही है! मुझे डीएएल डीएल के app.config में एसक्यूएल कनेक्शन जोड़ना पड़ा। ध्यान दें कि -StartupProjectName तर्क को डीएएल प्रोजेक्ट की बजाय एमवीसी/ui प्रोजेक्ट को इंगित करना होगा। आपकी सहायता के लिए धन्यवाद. –

4
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole 

पहले: प्रवासन

का नाम

Dbset.Framework: परियोजना जहां dbContext और अन्य वर्गों के

CodeFirstConsole: प्रारंभ ऊपर परियोजना

3

System.ArgumentException के लिए (अपने वेब, खिड़कियां या कंसोल अनुप्रयोग हो सकता है): पैरामीटर सही नहीं है। (HRESULT से अपवाद: 0x80070057 (E_INVALIDARG)) जोड़ने-projectname और startupprojectname मदद नहीं की।

पैकेज मैनेजर कंसोल की "डिफ़ॉल्ट परियोजना" ड्रॉपडाउन को लाइब्रेरी (मेरे मामले में) को इंगित करने के लिए जहां मैं चाहता हूं कि "माइग्रेशन फ़ोल्डर" और इसकी अपेक्षित सामग्री मल्टीप्रोजेक्ट समाधान से चलने का एकमात्र तरीका था।

+0

पॉल, क्या आप इसे थोड़ा सा विस्तारित कर सकते हैं? मैं भी -projectname और startupprojectname जोड़ने और इसे काम करने में सक्षम नहीं हूं। आप "डिफ़ॉल्ट प्रोजेक्ट" कहां सेट करते हैं (VS2013 का उपयोग करने में मैंने इसे नहीं देखा)। –

1

मुझे भी यही समस्या थी। पता चला है कि अगर कॉन्फ़िगरेशन फ़ाइलों के साथ कुछ भी गलत है तो यह त्रुटि आती है। मेरे पास web.config में डुप्लिकेट टैग थे और इन्हें हल करने के लिए मेरे मुद्दे को हटा दिया गया था।

0

उसी समस्या में भागो, जिसे web.config से <globalization> हटाकर हल किया गया।

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