2013-05-06 5 views
7

में ELMAH डेटाबेस बदलना मेरे पास कई वेबसाइटें हैं जिनमें अलग-अलग ELMAH डेटाबेस हैं। मैं इन सभी डेटाबेस को देखने के लिए एक अलग वेबसाइट चाहता हूं।कोड

मैंने इस उद्देश्य के लिए एक नई एएसपी.नेट एमवीसी 4 वेबसाइट बनाई है। मैं NuGet पैकेज "Elmah.MVC" जोड़ दिया है और कहा कि Web.config के लिए निम्न:

<connectionStrings> 
    <add name="Elmah.Sql" connectionString="..." /> 
</connectionStrings> 
<elmah> 
    <errorLog type="Elmah.SqlErrorLog" connectionStringName="Elmah.Sql" /> 
</elmah> 

यह ठीक एक एकल डाटाबेस के लिए जा रहा काम करता है। मैं कनेक्शनस्ट्रिंग को बदलकर डेटाबेस भी स्विच कर सकता हूं, लेकिन अब मैं कोड से डेटाबेस स्विच करने में सक्षम होना चाहता हूं। क्या ऐसा करने के लिए कोई रास्ता है?

उत्तर

11

ELMAH त्रुटि लॉग को अनुकूलित के लिए एक वर्ग है। इस कार्यान्वयन में आपको केवल

जैसे कार्यान्वयन की आवश्यकता है, तो आप किसी भी कनेक्शन स्ट्रिंग को पढ़ सकते हैं जो आप चाहते हैं। अंत में आप द्वारा

<elmah> 
    <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" /> 
</elmah> 

बता सकते हैं ELMAH कि Errorlog के बारे में पता आप विवरण here

देख सकते हैं मैं भी अपने मामले here

आशा इस सहायता में एक उदाहरण में पता चला।

+0

मैन मैं इस साइट को कैसे प्यार करता हूँ! –

0

यदि आप कोड से डेटाबेस स्विच करना चाहते हैं, तो आप Web.config पर भरोसा नहीं कर पाएंगे। आप इस तरह एक कक्षा में सक्रिय कनेक्शन संग्रहीत करने की आवश्यकता के लिए जा रहे:

public class DatabaseSession 
{ 
    public string ConnectionString { get; set; } 
} 

और फिर आप Session में इस बात का एक उदाहरण स्टोर करने के लिए की आवश्यकता होगी:

Session["DatabaseSession"] = new DatabaseSession() { ConnectionString = "your connection string"; } 

और आप करेंगे हर बार जब आप डेटाबेस कनेक्शन को बदलना चाहते हैं तो उस पंक्ति को चलाने की आवश्यकता है। फिर, जब आप डेटाबेस से कनेक्ट करना चाहते हैं, तो आपको इसे सत्र से बाहर खींचने की आवश्यकता होगी।

हालांकि, आप Web.config में सभी अलग-अलग कनेक्शन स्ट्रिंग स्टोर कर सकते हैं और उपयोगकर्ता को उस सूची से चुनने दें- आप बस कनेक्शन स्ट्रिंग को निर्धारित करने के लिए इसका लाभ नहीं उठा सकते हैं।

नोट: आप बस सत्र में कनेक्शन स्ट्रिंग संग्रहीत कर सकती है भी Session["DatabaseConnection"] = "your connection string"

3

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

एसक्यूएलरलॉग, दोनों रचनाकारों की आवश्यकता है।

public class ElmahSqlErrorLog : SqlErrorLog 
{ 
    public override string ConnectionString 
    { 
     get { return SettingsXmlService.GetConnectionString(); } 
    } 

    public ElmahSqlErrorLog(IDictionary config) : base(config) 
    { 
    } 

    public ElmahSqlErrorLog(string connectionString) : base(connectionString) 
    { 
    } 
} 

web.config (system.webServer के बाद जोड़ने)

<elmah> 
    <errorLog type="Business.Infrastructure.Elmah.ElmahSqlErrorLog, Business" connectionString="-" applicationName="Topsite" /> 
</elmah> 

connectionstring का मूल्य कोई फर्क नहीं पड़ता, क्योंकि हम यह रनटाइम पर पुनः प्राप्त है, यह हालांकि रिक्त नहीं हो सकता।