2009-06-30 3 views
35

जब एक इकाई ढांचे संदर्भ शुरू करें। अन्य तरीके से इस तरह केएक इकाई ढांचे संदर्भ शुरू करने के लिए सबसे अच्छा तरीका है?

public class EntityContactManagerRepository 
    : ContactManager.Models.IContactManagerRepository 
{ 
    private ContactManagerDBEntities _entities = new ContactManagerDBEntities(); 

    // Contact methods 
    public Contact GetContact(int id) 
    { 
     return (from c in _entities.ContactSet.Include("Group") 
       where c.Id == id 
       select c).FirstOrDefault(); 
    } 
} 

के रूप में विधि स्तर पर प्रारंभ करने में है

एक, श्रेणी स्तर पर प्रारंभ करने में है।

public class EntityContactManagerRepository 
    : ContactManager.Models.IContactManagerRepository 
{  
    // Contact methods 
    public Contact GetContact(int id) 
    { 
     using (var entities = new ContactManagerDBEntities()) 
      return (from c in entities.ContactSet.Include("Group") 
       where c.Id == id 
       select c).FirstOrDefault(); 
    } 
} 

एक Ado.Net पृष्ठभूमि से, मैं बाद में एक को प्रारंभ में विधि पसंद करते हैं, लेकिन पहले एक Stephen Walthe द्वारा विकसित उदाहरण से है। या एक और सवाल, क्या यह बिल्कुल मायने रखता है?

+0

लिंक मर चुका है ... – Jude

उत्तर

29

इससे कोई फर्क नहीं पड़ता, क्योंकि संदर्भ परिवर्तन ट्रैकिंग डेटा के जीवनकाल को नियंत्रित करता है, और यह भी प्रभाव डालता है कि ऑब्जेक्ट्स संपादित करते समय आप किस ऑब्जेक्ट को जोड़ सकते हैं, क्योंकि दो अलग-अलग संदर्भों पर ऑब्जेक्ट्स एक-दूसरे के साथ संबंध नहीं रख सकते हैं। ऐसा लगता है कि आपके द्वारा साझा किए जा रहे उदाहरण एएसपी.नेट एमवीसी एप्लिकेशन से आते हैं। इस मामले में, मैं आम तौर पर प्रति अनुरोध एक इकाई संदर्भ का उपयोग करता हूं, क्योंकि अनुरोध अल्पकालिक होते हैं, और चूंकि यह सामान्य है, अनुरोध में ऑब्जेक्ट को अपडेट करते समय, अन्य ऑब्जेक्ट्स लाने और उनके बीच संबंध बनाने के लिए।

दूसरी ओर, यदि आप एक लंबे समय के लिए एक इकाई के संदर्भ के आसपास रखने के लिए है, क्योंकि यह स्मृति को चबाना होगा के रूप में यह अधिक से अधिक वस्तुओं में परिवर्तन पटरियों नहीं करना चाहती।

यह विकल्प "वर्ग प्रति एक संदर्भ" के लिए एक तर्क की तरह लग सकता है, लेकिन यह वास्तव में, नहीं है। यह "काम की प्रति इकाई एक संदर्भ" के लिए एक तर्क की तरह है।

+1

आपके उत्तर की सराहना। "मैं आम तौर पर एक इकाई संदर्भ अनुरोध के अनुसार, का उपयोग के बाद से अनुरोध अल्पकालिक रहे हैं।" लगता है जैसे आप इसे विधि स्तर में भी पसंद करते हैं, क्योंकि यह अनुरोध के लिए बाध्यकारी है। –

+1

मैं इसे विधि स्तर पर नहीं करता क्योंकि "विधि प्रति अनुरोध" एक नियंत्रक क्रिया है, और मेरे नियंत्रक ऑब्जेक्ट संदर्भों के बारे में नहीं जानते हैं। मेरे लिए, संदर्भ सेवा के अंदर तत्काल है जो नियंत्रक द्वारा आवश्यक भंडार/भंडार बनाता है। लेकिन आपको सामान्य विचार मिल गया है। –

+0

आमतौर पर मेरे पास एक सहायक वर्ग होता है जो संदर्भ का एक उदाहरण देता है, जो अनुरोध के जीवन के लिए चिपक जाता है। आप वर्तमान HttpContext (HttpContext.Current) में इसका संदर्भ संग्रहीत कर सकते हैं। –

7

सामान्यतया: यह WinForms/WPF में ASP.NET में अनुरोध के अनुसार संदर्भ और खिड़की प्रति संदर्भ है।

एक लेख है कि प्रति अनुरोध प्रतिमान संदर्भ के पीछे काफी अच्छी तरह से तर्क बताते है: Entity Framework Object Context Scope

+7

लिंक किसी और काम नहीं करता है। –

+0

वेबसाइट या तो। – Jude

2

ठीक है, "सर्वश्रेष्ठ" जिस तरह से हमेशा व्यक्तिपरक है। हालांकि, परियोजना में एक यूनिटऑफवर्कस्कोप क्लास जोड़ना चीजों को बहुत सरल बना सकता है - अर्थात् आपको ऑब्जेक्ट संदर्भ बनाने या डेटाबेस की कार्यवाही को डेटाबेस में वापस रखने के बारे में बहुत कुछ नहीं सोचना पड़ता है।

एक महान लेख कि How To Create a Unit of Work Scope बताते है।

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