6

मैंने अभी एक उपयोगकर्ता नियंत्रण बनाया है। यह नियंत्रण दो स्थिर combosoxes लोड करने के लिए मेरी स्थिर इकाई फ्रेमवर्क कक्षा का भी उपयोग करता है। सभी ठीक है और बिना किसी समस्या के चलाता है। डिजाइन और रनटाइम काम कर रहे हैं। फिर जब मैं एप्लिकेशन को रोकता हूं तो मेरे उपयोगकर्ता नियंत्रण वाले सभी रूप डिज़ाइन समय में और काम नहीं करते हैं। मुझे बस दो त्रुटियां दिखाई देती हैं:उपयोगकर्ता नियंत्रण में ईएफ app.config नहीं देख सकता है?

त्रुटि 1: निर्दिष्ट नामित कनेक्शन या तो कॉन्फ़िगरेशन में नहीं मिला है, जिसका उद्देश्य EntityClient प्रदाता के साथ उपयोग नहीं किया जाना चाहिए, या मान्य नहीं है।

त्रुटि 2: परिवर्तनीय ccArtikelVelden या तो अव्यवस्थित है या कभी असाइन नहीं किया गया था।

रनटाइम सब कुछ अभी भी काम कर रहा है

(ccArtikelVelde मेरी UserControl है) मेरी स्थिर एफई Repositoy वर्ग:

public class BSManagerData 
{ 
    private static BSManagerEntities _entities; 
    public static BSManagerEntities Entities 
    { 
     get 
     { 
      if (_entities == null) 
       _entities = new BSManagerEntities(); 
      return _entities; 
     } 
     set 
     { 
      _entities = value; 
     } 
    } 
} 

कुछ तर्क मेरी UserControl में क्या हो रहा comboboxes में डेटा लोड करने के:

private void LaadCbx() 
{ 
    cbxCategorie.DataSource = (from c in BSManagerData.Entities.Categories 
           select c).ToList(); 
    cbxCategorie.DisplayMember = "Naam"; 
    cbxCategorie.ValueMember = "Id"; 
} 

private void cbxCategorie_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    cbxFabrikant.DataSource = from f in BSManagerData.Entities.Fabrikants 
           where f.Categorie.Id == ((Categorie)cbxCategorie.SelectedItem).Id 
           select f; 
    cbxFabrikant.DisplayMember = "Naam"; 
    cbxFabrikant.ValueMember = "Id"; 
} 

मेरे फॉर्म फिर से काम करने का एकमात्र तरीका, डिजाइन समय, उपयोगकर्ता नियंत्रण में ईएफ भाग को टिप्पणी करना है (ऊपर देखें) और पुनर्निर्माण। यह बहुत अजीब बात है, सबकुछ एक ही असेंबली में है, समान नामस्थान (सादगी के लिए)।

कोई भी विचार है?

+2

जैसे ही मैंने "स्थिर इकाई फ्रेमवर्क कक्षा" शब्द पढ़ते हैं, मैंने पढ़ना बंद कर दिया। यह करना बंद करो। अभी व। 'ऑब्जेक्ट कॉन्टेक्स्ट' को इस तरह इस्तेमाल करने के लिए डिज़ाइन नहीं किया गया है। – Aaronaught

उत्तर

8

ऐसा लगता है कि आप किसी भी तरह डिज़ाइन मोड में डेटाबेस कोड निष्पादित कर रहे हैं। इसे रोकने के लिए, नियंत्रण और विधि इस के कारण शिकार है, और का उपयोग करें:

if (DesignMode) 
    return 

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

+0

आपके उत्तरों के लिए धन्यवाद मैं सभी बेहतरीन अभ्यास के लिए हूं और यदि स्थिर वर्ग का उपयोग करना बुरा अभ्यास है तो मुझे यह देखना होगा कि मुझे इसे किसी अन्य तरीके से कैसे करना चाहिए। समस्या यह है कि मुझे कुछ समय पहले एक त्रुटि मिली, जहां मैं किसी अन्य संदर्भ से ऑब्जेक्ट को संपादित नहीं कर सका। मैंने स्टैक ओवरफ्लो पर पढ़ा है कि एक स्थिर वर्ग बनाना समाधानों में से एक था। यही कारण है कि मैं इस दृष्टिकोण के लिए गया था। मैं हर बार एक बड़ा प्रशंसक भी नहीं हूं जब मुझे डीबी तक पहुंचने की ज़रूरत है, मेरे ऑपरेशन के चारों ओर एक प्रयोग कथन बनाएं। मैं ईएफ के लिए नया हूं, इसलिए किसी भी रचनात्मक सलाह का स्वागत है और अधिक! – Sven

+0

बस आपने जो प्रस्तावित किया है उसकी कोशिश की लेकिन अभी भी अच्छा नहीं है। अब मैंने निम्नलिखित किया: निजी शून्य लाडसीबीएक्स() { अगर (डिजाइनमोड) वापसी; cbxCategorie.DataSource = (बीएसएमनेजरडेटा.इन्टिटीज में सी से। श्रेणियां सी का चयन करें)। टॉलिस्ट(); cbxCategorie.DisplayMember = "नाम"; cbxCategorie.ValueMember = "आईडी"; } हालांकि, जब मैं अपने रूप में नियंत्रण जोड़ने की कोशिश करता हूं तो मुझे निम्न त्रुटि मिलती है: http://img716.imageshack.us/img716/6549/eferror.png – Sven

+0

आप LaadCbx() कहां से कॉल कर रहे हैं? यदि आप इसे किसी कन्स्ट्रक्टर से कॉल कर रहे हैं, तो इसे नियंत्रण के कन्स्ट्रक्टर से निकालने का प्रयास करें। यह बेहतर है (न केवल इस मुद्दे के लिए, बल्कि सामान्य रूप से) कन्स्ट्रक्टर में जितना संभव हो उतना करने के लिए, खासकर डीबी कनेक्शन नहीं। इसके बजाए डेटा लोड करने के लिए आपको ऑनलोड जैसे हुक का उपयोग करने में सक्षम होना चाहिए। –

2

मैं एक ही समस्या,

का सामना करना पड़ा मेरे मामले में, मैं उपयोगकर्ता नियंत्रण लोड हो रहा है घटना में कुछ डेटाबेस कोड जो कुछ लाइब्रेरीज, जिसमें क्रम तक लोड नहीं किया गया उपयोग कर रहे थे जोड़ लिया है।

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

आशा है, यह आपकी मदद करता है!

+0

पूछना बेहतर है, धन्यवाद! मैंने समझने की कोशिश कर 3 घंटे बिताए हैं, मैं क्या गलत कर रहा हूं। मैं इकाई मॉडल को फिर से बनाने की कोशिश कर रहा था, कुछ परीक्षण समाधान बनाए ... और जवाब सरल था: उपयोगकर्ता नियंत्रण लोड घटना में डाटाबेस कोड लिखने के लिए नहीं! –

0

यह त्रुटि दिखाती है कि क्या आप उपयोगकर्ता नियंत्रण के निर्माता पर "LaadCbx()" फ़ंक्शन को कॉल करते हैं।

क्योंकि इस फ्रेम में इकाई ढांचे पर प्रारंभिकता मौजूद है।

समाधान इस फ़ंक्शन को "लाडसीबीएक्स()" को मूल रूप के निर्माता के रूप में कॉल करना है।

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