2011-08-13 6 views
12

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

अगर मैं डैपर का उपयोग कर रहा था तो मुझे पता है कि कनेक्शन प्रक्रिया कैसे बहती है क्योंकि मैं इसे नियंत्रित करता हूं। मुझे नहीं पता कि पेटापोको के साथ डीएएल बनाने में सर्वोत्तम प्रथाएं क्या हैं।

public class UserRepository 
    { 
     public IEnumerable<User> All() 
     { 
      var db = new PetaPoco.Database("Sqlite_Connection");//this line 
      var s = db.Query<User>("SELECT * FROM Users"); 
      return s.ToList(); 
     } 
    } 

मैं एक स्थिर संपत्ति के रूप में मेरे DALHelper कक्षा में var db = new PetaPoco.Database("Sqlite_Connection");//this line स्थापित करना चाहते हैं, लेकिन मैं scalability

उत्तर

11

मैं एक स्थिर का उपयोग करने की अनुशंसा नहीं करता क्योंकि आप जैसी त्रुटियां प्राप्त कर सकते हैं क्योंकि एक ही संसाधन का उपयोग उसी अनुरोध को स्वीकार करने के विभिन्न अनुरोधों द्वारा किया जाता है।

दो विकल्प:

1. एक नियंत्रक आधार वर्ग में कनेक्शन बनाएँ

public class BaseController : Controller 
{ 
    protected DatabaseWithMVCMiniProfiler _database; 

    protected override void OnActionExecuting(ActionExecutingContext filterCon) 
    { 
    base.OnActionExecuting(filterCon); 

    _database = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 

    } 
} 

2. स्टेटिक विधि अनुरोध के अनुसार एक कनेक्शन बनाने

public static class DbHelper { 
    public static Database CurrentDb() { 
    if (HttpContext.Current.Items["CurrentDb"] == null) { 
     var retval = new DatabaseWithMVCMiniProfiler("MainConnectionString"); 
     HttpContext.Current.Items["CurrentDb"] = retval; 
     return retval; 
    } 
    return (Database)HttpContext.Current.Items["CurrentDb"]; 
    } 
} 
+1

धन्यवाद एडुआर्डो, मुझे फिर से पेटापोको के साथ विश्वास दिलाता है, यह सिर्फ अनुरोध के साथ 1 petapoco.database उदाहरण का उपयोग करने के सुझाव के साथ यह SO पाया: http://stackoverflow.com/questions/7126205/how-can-integrate-mvcminiprofiler-with- पेटापोको-बिना-बदलते-स्रोतों – joeriks

+1

पेटापोको शानदार है। मैं इसे कई परियोजनाओं में उपयोग कर रहा हूं और सभी प्रकार के परिदृश्यों में बहुत अच्छी तरह से काम करता हूं। –

3

बारे में चिंतित हूँ एक स्थिर संपत्ति प्रारंभ के लिए ठीक हो जाएगा। पेटापोको प्रत्येक बार कनेक्शन खोलने और बंद कर देगा, जब तक कि आप लेनदेन का उपयोग नहीं कर लेते। कनेक्शन पूलिंग के कारण यह आमतौर पर एक मुद्दा नहीं है।

यदि आप इसे वेब एप्लिकेशन में उपयोग कर रहे हैं तो आपको प्रति अनुरोध एक पेटापोको डेटाबेस को तुरंत चालू करना चाहिए।

+0

मैं इसमें इस तरह से उपयोग कर रहा हूँ डीएएल संचालन के बीच नेस्टेड लेनदेन को संभालने के लिए उत्पादन और यह ठीक काम कर रहा है। – Larry

+0

I (और अन्य) ने पाया है कि एक स्थिर (प्रति आवेदन के रूप में) का उपयोग करने में समस्याएं हैं। मेरा जवाब देखें –