2012-02-02 42 views
9

मैं एक नया एमवीसी 3 एप्लीकेशन बना रहा हूं।
कदम उठाए:
1. जोड़ा नए मॉडल राइट क्लिक करके मॉडल पर और "LINQ एसक्यूएल के लिए कक्षाएं" मेरी नई dbml लेआउट के लिए सर्वर एक्सप्लोरर से
2. खींचे गए टेबल जोड़ने और बचाया
3. सही Controllers- पर क्लिक करें > Add-> नियंत्रक
4. निम्न जानकारी डालें:
एमवीसी 3 कंट्रोलर मचान जोड़ें त्रुटि - असमर्थित संदर्भ प्रकार

Controller name: UserController
Template: Controller with read/write actions and views, using Entity Framework
Model Class: aspnet_User (TierPay)
Data Context Class: AgricultureDataContext (TierPay)
Views: Razor (VBHTML)

5.Click
जोड़े निम्न त्रुटि 6.Get:
Unsuppo rted संदर्भ प्रकार।

मैंने चारों ओर गुगल किया है और मुझे कोई जवाब नहीं मिला है। धन्यवाद!

+0

मुझे एक ही समस्या मिल रही थी। किसी कारण से ऑटो उत्पन्न डेटा संदर्भ गलत है .. हर बार। –

उत्तर

19

मैं जब एसक्यूएल को Linq के बजाय इकाई डेटा मॉडल के साथ काम इस त्रुटि हो रही थी। मैंने मौजूदा SQL सर्वर डेटाबेस से मॉडल बनाया था। समस्या कंट्रोलर संवाद में गलत डेटा संदर्भ वर्ग का चयन करके हुई थी। नामों के हिस्से के रूप में "एंटीसाइट्स" वाले किसी मामले में, उन मानों को शीर्ष स्तर की श्रेणी की आवश्यकता होती है। आशा है कि ये आपकी मदद करेगा।

Add new Controller to MVC project From Entity Models

+1

मुझे पता है कि यह कुछ साल बाद है, लेकिन यह जवाब मेरी मदद करता है, धन्यवाद केन। – Rod

0

मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे थे .. लेकिन मैंने खुद को एक ही त्रुटि देखी .. Google बहुत मदद नहीं कर रहा था और मैंने खुद को इस मुद्दे को हल करने में घायल हो गए।

संभव समाधान:

आप एक मॉडल है कि एक एफई (इकाई की रूपरेखा) वर्ग है कि एक और वर्ग के लिए प्रदान शामिल हैं बना रहे हैं .. सुनिश्चित करें कि आप लक्षित एफई वर्ग के लिए है कि निर्माता का विस्तार कर रहे हैं और नहीं मॉडल वर्ग फ़ाइल अनजाने में ..

मैं गरीब स्पष्टीकरण के लिए क्षमा चाहता हूं लेकिन मैं इसके लिए नया हूं .. अगर यह मदद करता है तो मुझे बताएं।

सादर

+1

जानकारी के लिए धन्यवाद। मैं ईएफ के बजाय LINQ से SQL का उपयोग कर रहा हूँ। अब तक मुझे पता चला है कि मैं फ़ंक्शन नाम पर राइट क्लिक करके दृढ़ता से टाइप किया गया दृश्य जोड़ सकता हूं और व्यू व्यू का चयन कर सकता हूं, इसलिए मेरा वर्कअराउंड नियंत्रक w/o मचान को जोड़ना है और फिर LINQ मॉडल पर टाइप किए गए दृश्य को जोड़ना है। – fhilton

12

यह संवाद पहले जब इकाई की रूपरेखा डाटाबेस पहला विकल्प का उपयोग करने में भ्रमित कर रहा है।

यदि आप पहले डीबी का उपयोग कर रहे हैं तो दोनों "मॉडल क्लास" ड्रॉपडाउन और "डेटा रेफरेंस क्लास" ड्रॉपडाउन में समान श्रेणी के नाम दिखाई देंगे।

यदि आप उदाहरण के लिए हैं, तो "उपयोगकर्ता" प्रकार के मॉडल से बंधे नियंत्रक को बनाने का प्रयास करने का कहना है कि आप मॉडल ड्रॉप डाउन सूची के साथ-साथ "डेटा संदर्भ" भाग में "उपयोगकर्ता" दोनों को देखेंगे संवाद

संवाद के "मॉडल वर्ग" भाग में आप अपना मॉडल चुनना चाहते हैं (यहां हमारे उदाहरण में उपयोगकर्ता)।

संवाद के "डेटा संदर्भ वर्ग" भाग में आप "उपयोगकर्ता" का चयन भी नहीं करना चाहते हैं। इसके बजाय आप उस ऑब्जेक्ट को चुनना चाहते हैं जो आपकी EDMX फ़ाइल में है जो ऑब्जेक्ट कॉन्टेक्स्ट से प्राप्त होता है। यदि आप पहले डीबी का उपयोग कर रहे हैं तो ड्रॉप डाउन सूची में इस तरह की एक कक्षा होगी। आप इस वर्ग को सूची में देखेंगे और मुझे नहीं पता कि अन्य वर्ग सूची में क्यों हैं। मुझे लगता है कि माइक्रोसॉफ्ट से एक छोटा यूआई दोष हो सकता है।

यदि आपको नहीं पता कि यह कक्षा क्या है, तो बस अपने ईडीएमएक्स मॉडल पर जाएं और इसके साथ जुड़े designer.cs फ़ाइल पर क्लिक करें। इस कोड के शीर्ष पर आप ऑब्जेक्ट कॉन्टेक्स्ट से प्राप्त कक्षा को देखेंगे। यह वह वर्ग है जिसे आप चुनना चाहते हैं।

3

मुझे यह त्रुटि संदेश मिला जब मैंने "मॉडल क्लास" और "डेटा संदर्भ वर्ग" मिश्रित किया था।

0

मैं WinDbg में इस समस्या को डिबग और यह निम्न Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn.EntityFrameworkServices विधि के कारण होती है:

 
internal static bool IsValidContextType(Type contextType) 
{ 
    return (typeof(ObjectContext).IsAssignableFrom(contextType) || ((contextType.BaseType != null) && contextType.BaseType.FullName.Equals("System.Data.Entity.DbContext", StringComparison.OrdinalIgnoreCase))); 
} 

इस विधि झूठी लौटा रहा है, क्योंकि यह गलत प्रकार से पारित कर दिया जा रहा है। मुझे यकीन नहीं है कि वे कहां से आते हैं, लेकिन वीएस के अंदर कई डीएलएल लोड किए गए हैं जिनमें संदर्भ प्रकार के कार्यान्वयन होते हैं, लेकिन उनमें से केवल एक ही डीबीकॉन्टेक्स्ट से व्युत्पन्न होता है - अन्य सभी सिस्टम से प्राप्त होते हैं। ऑब्जेक्ट। इन फर्जी प्रकारों की असेंबली मेरी '% localappdata% \ assembly' निर्देशिका में हैं, इसलिए वे कुछ टूल द्वारा स्वत: जेनरेट की गई हैं और वीएस में लोड की गई हैं।

बग इस तथ्य के कारण होता है कि Microsoft.VisualStudio.Web.Mvc.Util.TypeHelper.GetType केवल Type.FullName द्वारा फ़िल्टर करता है। सही प्रकार को खोजने के लिए IsValidContextType() द्वारा फ़िल्टर करना भी आवश्यक है।

ठीक है, कुछ वास्तव में अजीब चल रहा है। मेरे डीबीकॉन्टेक्स्ट-व्युत्पन्न वर्ग के लिए मेरे पास 2 आंशिक कक्षाएं हैं (इनमें से अधिकांश एक .tt स्क्रिप्ट द्वारा स्वतः उत्पन्न होती हैं, और कुछ हाथ से तैयार की जाती हैं)। जब मैं नियंत्रक जोड़ने की कोशिश करता हूं, वीएस मेरी आंशिक कक्षा में नई गुण जोड़ता है, तो यह आंशिक वर्ग के उस हिस्से को बनाता है (केवल मैन्युअल भाग, और यह बेस क्लास का उपयोग नहीं करता है)। तो यह उस डीएलएल को लोड करता है जो इसे मॉडल वर्ग के आधे से स्मृति में बनाया गया है, फिर यह उपरोक्त बेस-क्लास चेक में विफल रहता है।

अजीब।

नीचे पंक्ति: यदि आपके पास है तो अपने मॉडल संदर्भ के आंशिक वर्गों को निकालने का प्रयास करें।

+0

इसका यह भी अर्थ है कि आपके पास डीबीसीएन्टेक्स्ट की विरासत के कई स्तर नहीं हो सकते हैं। यह मुझे बाहर पकड़ा। अगर मैं सीधे डीबीकॉन्टेक्स्ट से प्राप्त करता हूं, तो यह ठीक काम करता है। –

0

मुझे ईएफ के साथ एक ही समस्या मिली। मैं वीएस 2012 का उपयोग कर रहा हूं मेरे मामले का कारण था .. यह ऑटो जनरेशन प्रक्रिया (मचान) आंशिक वर्ग अवधारणा को नहीं पहचानती है।

मैंने मॉडल का पहला दृष्टिकोण उपयोग किया और मैंने इकाइयों के साथ विरासत का उपयोग किया है। उदाहरण: इकाई 'बी' और 'सी' 'ए'

मेरी उत्पन्न मॉडल वर्ग "DataModelContainer" जो "DbContext" से प्राप्त होती है, में

तो "DbSet" और "DbSet के लिए कोई परिभाषा नहीं है से प्राप्त होती है " अर्थात्: निम्नांकित दो पंक्तियों को देखते

public DbSet<B> B { get; set; } 
public DbSet<C> C { get; set; } 

जेनरेट किए गए नहीं थे" DataModelContainer "मैं एक आंशिक वर्ग वर्ग, इसलिए मैं दूसरे भाग पूरा, आंशिक वर्ग की अवधारणा का उपयोग कर। और यह मचान के लिए एक समस्या होगी।

मेरा कामकाज था, मैंने मैन्युअल रूप से जोड़ा गया आंशिक वर्ग हटा दिया था। और ऑटो जेनरेटेड क्लास में "डीबीसेट" और "डीबीसेट" के लिए परिभाषाओं को जोड़ा। इस समाधान के साथ समस्या यह है कि, जब मैं मॉडल कक्षाओं को पुन: उत्पन्न करता हूं तो मुझे वही चीज़ दोहराना पड़ता है।