2010-12-09 19 views
6

में ईएफ 4 का उपयोग करते समय मुझे कोई समस्या हो रही है, जब मैं यह सत्यापित करने की कोशिश कर रहा हूं कि वस्तु पहले से ही इकाई फ्रेमवर्क संदर्भ के अंदर है या नहीं।सत्यापित करें कि ऑब्जेक्ट पहले से ही एंटीटी फ्रेमवर्क संदर्भ

मैं नीचे

 var entityName = Entity4Test + Guid.NewGuid(); 

     using(var ctx = new EnviroDataContext()) 
     { 
      var etc = new Entity 
      { 
       Name = entityName 
      }; 

      ctx.Entity.AddObject(etc); 

       var q = from p in ctx.Entity 
         where p.Name == entityName 
         select p; 

// Why 'q.ToList().Count == 0'? 

       ctx.SaveChanges(); 
      } 

इस कोड है मेरा प्रश्न है, क्यों मेरी खोज प्रविष्टि के बाद, खाली बाहर आ गया?

मुझे पता है कि डेटा 'सेव चेंज' के बाद जारी है, लेकिन अगर मुझे अपनी इकाई मेमोरी डेटा 'क्वेरी' करने की आवश्यकता है तो क्या होगा।

सवाल

मैं एक व्यवसाय नियम है विस्तार है कि 1 आइटम एक जोड़कर, दूसरों संस्थाओं बी मुद्दा है, मैं सत्यापन नियम है की प्रविष्टि से चलाता है कि, टी ए बी की प्रविष्टि पर पहले से ही मौजूद होना चाहिए।

क्योंकि इन सभी कार्यों को 'सेव चेंज' से पहले बनाया गया है, मुझे एक त्रुटि मिलती है कि EntityA मौजूद नहीं है।

अन्य मामला, मेरे पास एक नाम फ़ील्ड है जो तालिका पर अद्वितीय है। यदि मैं दोबारा AddEntityName ("bla") को चलाने की कोशिश करता हूं और फिर 'सेव चेंज' चलाता हूं, तो मुझे डीबी [अनोखा बाधाओं] से अपवाद मिलता है, भले ही सम्मिलन के लिए मेरी मान्यता उत्तीर्ण करने के बाद भी, यह गारंटी देता है कि एक नाम अद्वितीय है।

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

उत्तर

9

जब आप .AddObject करते हैं, तो यह इसे "जोड़ा गया" की लंबित स्थिति में ईएफ की आंतरिक "ग्राफ" (मेमोरी) में जोड़ता है।

केवल एक बार जब आप ctx.SaveChanges() करते हैं तो परिवर्तन अंतर्निहित स्टोर पर बने रहेंगे।

जो प्रश्न आप लिख रहे हैं वह डेटाबेस के खिलाफ है, और परिवर्तन अभी तक जारी नहीं रहा है।

तो यदि आप के बाद अपनी क्वेरी निष्पादित करते हैं तो आप ctx.SaveChanges() करते हैं, तो गणना की अपेक्षा की जाएगी।

एक तरफ ध्यान दें, यदि आप अगर एक इकाई के ग्राफ में पहले से ही है देखना चाहते हैं (उदाहरण, इससे पहले कि आप "अटैच करें"), अप ObjectStateManager.TryGetObjectStateEntry पर पढ़ें।

+0

मैं समझता हूं कि आप क्या कह रहे हैं, लेकिन सवाल यह है कि यदि यह व्यवहार समझ में आता है, यदि आपके पास व्यवसाय नियम हैं जो अधिक प्रविष्टियां और सत्यापन का तात्पर्य है? – muek

+0

@muek - क्षमा करें, अपने प्रश्न को समझें नहीं। आपका क्या अर्थ है? – RPM1984

+0

मेरी बुराई। मेरा विस्तारित प्रश्न देखें। – muek

1

मैंने ईएफ 4 का उपयोग नहीं किया है, लेकिन पिछले संस्करण का उपयोग किया है, इसलिए मुझे नहीं पता कि उनकी ईएफ 4 में एक अलग उम्मीद है या नहीं। ऐसा लगता है कि आप इसे वास्तव में करने से पहले डीबी में संपत्ति की खोज करने का प्रयास कर रहे हैं। आपको पहले SaveChanges को कॉल करना चाहिए और उसके बाद खोजना चाहिए।

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