2010-10-19 11 views
5

के बीच अंतर कोई मुझे पीओसीओ, सेल्फ ट्रैकिंग एंटिटीज, पॉको प्रॉक्सी के बीच का अंतर बता सकता है?ईएफ 4: पीओसीओ, सेल्फ ट्रैकिंग एंटिटीज, पीओसीओ प्रॉक्सी

असल में, मैं इकाई फ्रेमवर्क 4.0 और पीओसीओ (रिपोजिटरी पैटर्न) पर काम कर रहा हूं और जब भी मैं पीओसीओ में कुछ बदलाव करता हूं और ऑब्जेक्ट कॉन्टेक्स्ट को कॉल करता हूं .वेन्चेंज तब यह डीबी को दर्शाता है। मेरे सवाल है,

  1. कैसे प्रसंग डीबी के लिए परिवर्तन जारी रहती है, क्योंकि यह ट्रैक नहीं किया जाता है?
  2. क्या संदर्भ POCO के लिए फ्लाई पर ट्रैकिंग जानकारी उत्पन्न करता है?

नमूना कोड मैं उपयोग कर रहा हूँ,

 IEFRepository<Category> catRepository = new EFRepository<Category>(); 
     Category c = catRepository.FindOne<Category>(x => x.Name == "Paper"); 

     c.Name = "Paper"; 
     catRepository.SaveChanges(System.Data.Objects.SaveOptions.None); 

उत्तर

6

स्व ट्रैकिंग संस्थाओं Pocos नहीं हैं। इसके विपरीत, वे बहुत दृढ़ता से अवगत हैं। EntityObject इकाइयों से भी अधिक, यहां तक ​​कि। उन्हें अद्वितीय बनाता है कि परिवर्तनों को ट्रैक किया जा सकता है, भले ही वे ObjectContext से जुड़े न हों।

"शुद्ध" पीओसीओ, जैसा कि आप कहते हैं, परिवर्तन ट्रैकिंग को मुश्किल बनाते हैं। वास्तव में, केवल एक चीज जो आप कर सकते हैं वह वस्तु के स्नैपशॉट की तुलना करें। ऑब्जेक्ट संदर्भ में इसके लिए DetectChanges विधि है।

एक छद्म-पीओसीओ प्रॉक्सी के साथ, जो वास्तव में आपके पास है वह एक प्रकार है जो लगभग (लगभग) संकलन समय पर एक पीओसीओ और रनटाइम पर गैर-पीओसीओ की तरह दिखता है। मैं "लगभग" कहता हूं क्योंकि रनटाइम पर आपको एक उदाहरण मिलेगा जो संकलन-समय प्रकार का उप-प्रकार है। इस वजह से, आप जिन गुणों को ट्रैक ट्रैक करना चाहते हैं, वे गैर-निजी और आभासी होना चाहिए। आलसी लोडिंग पर भी इसी तरह के प्रतिबंध लागू होते हैं। आप ADO.NET टीम ब्लॉग पर this series of articles में इसके बारे में अधिक पढ़ सकते हैं।

+1

धन्यवाद क्रेग, और मेरे प्रश्न के दूसरे भाग के लिए उत्तर है ProxyCreationEnabled गलत होना चाहिए। पीओसीओ प्रॉक्सी के साथ काम करने के रूप में, ईएफ एनईटी फ्रेमवर्क में असेंबलीबिल्डर और टाइपबिल्डर का उपयोग करके फ्लाई पर प्रॉक्सी प्रकार उत्पन्न करता है। – paragy

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