24

के साथ उपयोग के लिए DBContext को ऑब्जेक्ट कॉन्टेक्स्ट में कनवर्ट करें मेरे पास डेटा जारी रखने के लिए ईएफ कोडफर्स्ट का उपयोग कर एक वेबफॉर्म प्रोजेक्ट है। लेखन सीआरयूडी को बचाने के लिए मैं एक ग्रिड व्यू और एंटिटीडेटा स्रोत का उपयोग करना चाहता हूं। क्या यह संभव है?GridView

क्या मैं अपने डीबीसीएन्टेक्स्ट को ऑब्जेक्ट कॉन्टेक्स्ट में परिवर्तित कर सकता हूं जो EntityDataSource द्वारा अपेक्षित है?

यहाँ मैं क्या करने की कोशिश की है:

प्रकार की वस्तु कास्ट करने में असमर्थ 'SomeNamespace.Models.ShopDBContext' टाइप करने के लिए 'System.Data.Objects:

<asp:EntityDataSource ID="OrdersDataSource" runat="server" ContextTypeName="SomeNamespace.Models.ShopDBContext" 
    EnableFlattening="False" EntitySetName="Orders" EntityTypeFilter="Order" EnableDelete="False" 
    EnableUpdate="False" Include="OrderLines" OrderBy="it.Id"> 
</asp:EntityDataSource> 

<asp:GridView ID="OrdersGridView" runat="server" AllowPaging="True" AllowSorting="True" 
    AutoGenerateColumns="True" DataKeyNames="Id" DataSourceID="OrdersDataSource" /> 

हालांकि मैं इस अपवाद मिलता है। ObjectContext '।

+2

के संभावित डुप्लिकेट [एक Asp.Net डेटा स्रोत के लिए एफई कोड पहले DbContext बाध्य करने के लिए कैसे?] (Http://stackoverflow.com/questions/6327937/how-to-bind-ef-code-first-dbcontext-to -an-asp-net-datasource) –

+0

वास्तव में यह एक डुप्लिकेट है, धन्यवाद (नोट: "DBContext ऑब्जेक्ट कॉन्टेक्स्ट ग्रिड व्यू" के लिए एक खोज यह मिल जाएगी लेकिन उत्तर के साथ सवाल नहीं) – Myster

उत्तर

64

इस प्रयास करें:

var context = new YourDbContext(); 
var adapter = (IObjectContextAdapter)context; 
var objectContext = adapter.ObjectContext; 
+1

भगवान उन पंक्तियों के लिए सभी जगहों पर देख रहे थे । धन्यवाद! – forhas

+2

यह एक बेवकूफ सवाल हो सकता है लेकिन यदि 'YourDbContext' को 'IObjectContextAdapter' प्राप्त होता है, तो आपको इसे क्यों डालना होगा? 'YourDbContext' ऑब्जेक्ट कॉन्टेक्स्ट को तत्काल नहीं करना चाहिए? – Eitan

+1

क्योंकि IObjectContextAdapter इंटरफ़ेस में केवल एक प्रॉपर्टी (ऑब्जेक्ट कॉन्टेक्स्ट) है जिसे डीबीकॉन्टेक्स्ट क्लास पर निजी तरीके से कार्यान्वित किया गया है। इस लिंक को चेक करें http://stackoverflow.com/questions/792908/what-is-a-private-interface – marianosz

3

यह एक प्रयास करें ->

protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) 
{ 
    var context = new YourContext(); 
    e.Context = ((IObjectContextAdapter)context).ObjectContext; 
} 
1

संघर्ष के 2 दिनों के बाद, मैंने पाया इस link जो मुझे मदद की है.मैं 2012 और withVS काम कर रहा हूँ मुझे डीबीसीएन्टेक्स्ट के साथ एक ही समस्या थी।
लिंक के मुताबिक, वीएस2012 में डिफ़ॉल्ट कोड जेनरेटर को पीओसीओ इकाइयों और डीबीसीएन्टेक्स्ट उत्पन्न करने के लिए बदल दिया गया था, जो एंटीटी ऑब्जेक्ट और ऑब्जेक्ट कॉन्टेक्स्ट से प्राप्त इकाइयों के विपरीत था जो वीएस -2010 में डिफ़ॉल्ट था।
समाधान एक्सप्लोरर में, आपके इकाई मॉडल के तहत, आपको टीटी टेम्पलेट्स को हटाने की जरूरत है और, डिजाइनर में, डिजाइनर सतह पर राइ-क्लिक करें और फिर गुणों में एंटीटी ऑब्जेक्ट आधारित इकाइयों को प्राप्त करने के लिए कोड जनरेशन रणनीति को किसी से डिफ़ॉल्ट में बदल दें और ऑब्जेक्ट कॉन्टेक्स्ट संदर्भित व्युत्पन्न।

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