2014-10-22 7 views
8

हम यह पता लगाने की कोशिश कर रहे हैं कि वास्तव में एक इकाई फ्रेमवर्क डेटाबेस प्रारंभकर्ता कब चलता है।जब "पहली बार" DbContext डेटाबेस को एक्सेस करता है तो वास्तव में कब होता है?

MSDN initializion "पहली बार" हम डेटाबेस का उपयोग होता है कहते हैं। "पहली बार" कब होता है?

MSDN खुद के विपरीत है, कि प्रारंभ करते हुए कहा पहली बार एक उदाहरण एक DbContext की प्रयोग किया जाता है, लेकिन यह भी पहली बार एक DbContext के प्रकार प्रयोग किया जाता है चलाता है। जो यह है?

आगे, एमएसडीएन "पहली बार" परिभाषित नहीं करता है? प्रकाशित होने के बाद यह पहली बार है? एप्लिकेशन_स्टार्ट के बाद पहली बार? किसी दिए गए अनुरोध के लिए किसी दिए गए अनुरोध के लिए पहली बार? क्या होगा यदि हम web.config को बदलकर एप्लिकेशन को पुनरारंभ करें?

यहाँ MSDN से कुछ उद्धरण, कह डेटाबेस प्रारंभकर्ता चलाता रहे हैं ...

जब एक DBContext व्युत्पन्न वर्ग का एक उदाहरण के लिए पहली बार

http://msdn.microsoft.com/en-us/library/gg696323%28v=vs.113%29.aspx

के लिए प्रयोग किया जाता है

जब दिया गया डीबीकॉन्टेक्स्ट प्रकार पहली बार डेटाबेस तक पहुंचने के लिए उपयोग किया जाता है

http://msdn.microsoft.com/en-us/library/gg679461%28v=vs.113%29.aspx

उदाहरण के लिए, हम एक नियंत्रक कार्रवाई, जिसमें हम एक DbContext का दृष्टांत और एक डालने आपरेशन चलाने की है। अगर हम इस क्रिया को दो बार (या 10,000 बार) कहते हैं, तो क्या DbInitializer कई बार चलता है? हम DropDatabaseCreateAlways प्रारंभकर्ता का उपयोग कर रहे हैं, और हम दो बार इस कार्रवाई फोन, Db दो Event पंक्तियों होगा, या प्रारंभकर्ता आवेषण के बीच Db को नष्ट करेगा, तो इस तरह एक Event पंक्ति छोड़ने?

public HttpResponseMessage PostEvent(EventDTO eventDTO) 
{ 
    var ev = new Event() 
    { 
     Id = eventDTO.Id, 
     Name = eventDTO.Name 
    }; 

    using (AttendanceContext db = new AttendanceContext()) 
    { 
     db.Events.Add(ev); 
     db.SaveChanges(); 
    } 

    return Ok(); 
} 
+4

बहुत यकीन है कि यह तब होता है जब आप अपना पहला पढ़/अपडेट/हटा/डालें। – DavidG

+0

या तो अपने डीबी या अपने आवेदन के चारों ओर एक पैकेट स्निफ़र सेट करें और जब ऐसा होता है तो अपने आप को देखें। – Servy

+0

मेरे अनुभव से यह पहली बार डेटाबेस तक पहुंचने के लिए उपयोग किया जाता है। –

उत्तर

6

इकाई की रूपरेखा AppDomain स्टार्टअप प्रति एक बार databse initializes।

DbContext वर्ग पहले अपने कोड द्वारा instantiated किया जाता है, और यह में से एक गुण एक्सेस किया जाता है, यह एक InternalContext उदाहरण है कि आरंभीकरण तर्क संभालती का उपयोग करता है, और यह सुनिश्चित करता है कि ने कहा कि प्रारंभ में केवल एक बार चलाता है, एक स्थिर वर्ग क्षेत्र का उपयोग।

यदि आप web.config फ़ाइल में कोई परिवर्तन करते हैं, या जब एप्लिकेशन पूल रीसायकल या आईआईएस प्रक्रिया को पुनरारंभ किया जाता है, तो आपका एप्लिकेशन डोमेन फिर से शुरू हो जाएगा और प्रारंभकर्ता आग लग जाएगा। This post should help in knowing when this happens in web applications.

उसी संदर्भ उदाहरण कई बार पुन: उपयोग, या यहाँ तक कि प्रत्येक अनुरोध पर एक नया संदर्भ बनाने, आरंभीकरण हर बार ट्रिगर नहीं करेगा।

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