2009-01-08 9 views
7

मैं जो एक GUID है कोई कस्टम गुण जोड़ने के लिए कोशिश कर रहा हूँ, लेकिन यह मुझे इस त्रुटि देता है:का उपयोग uniqueidentifiers/log4net में कस्टम गुण के रूप में guids

System.InvalidCastException: Failed to convert parameter value from a String to a Guid. ---> System.InvalidCastException: Invalid cast from 'System.String' to 'System.Guid'.

मैं config में इस निर्दिष्ट करें:

<parameter> 
<parameterName value="@id" /> 
<dbType value="Guid" /> 
<layout type="log4net.Layout.PatternLayout"> 
<conversionPattern value="%X{id}" /> 
</layout> 
</parameter> 

वास्तविक कोड (स्निपेट) मैं का उपयोग यह है:

 Guid guid = Guid.NewGuid(); 
     if (defaultLogger.IsEnabledFor(level)) 
     { 
      var loggingEvent = new LoggingEvent(ThisDeclaringType, 
defaultLogger.Repository, defaultLogger.Name, level, message, exception); 
      loggingEvent.Properties["Id"] = guid; 

किसी भी मदद कृपया? :) डेटाबेस में आईडी फ़ील्ड को एक अद्वितीय पहचानकर्ता के रूप में परिभाषित नहीं किया गया है, लेकिन इसमें प्राथमिक कुंजी प्रदूषण नहीं है।

+0

आप एक गाइड क्यों चाहते हैं? क्या यह किसी प्रकार का संदर्भ प्रदान करता है? –

उत्तर

22

अपने उदाहरण के लिए निम्नलिखित काम करना चाहिए:

<parameter> 
<parameterName value="@Oid" /> 
<dbType value="Guid" /> 
<layout type="log4net.Layout.RawPropertyLayout"> 
<key value="Id" /> 
</layout> 
</parameter> 

महत्वपूर्ण आप कुछ और करने के लिए @id नाम बदलने अन्यथा आप डेटाबेस में अशक्त मूल्यों भले ही आप तार डालने के लिए कोशिश मिल जाएगा है,

और फिर स्टोर करने के लिए RawPropertyLayout का उपयोग करें, क्योंकि आपको कनवर्ट करने की आवश्यकता नहीं है।

virtual public void FormatValue(IDbCommand command, LoggingEvent loggingEvent) 
     { 
      // Lookup the parameter 
      IDbDataParameter param = (IDbDataParameter)command.Parameters[m_parameterName]; 

      // Format the value 
      object formattedValue = Layout.Format(loggingEvent); 

      // If the value is null then convert to a DBNull 
      if (formattedValue == null) 
      { 
       formattedValue = DBNull.Value; 
      } 

      if (param.DbType == System.Data.DbType.Guid) 
      { 
       param.Value = new Guid(formattedValue.ToString()); 
      } 
      else 
      { 
       param.Value = formattedValue; 
      } 
     } 

तो यह काम करता है:

+1

स्पष्टता के लिए, लॉगिंगइवेंट गुण संग्रह में देखने के लिए मूल्य का नाम है। – bluedot

0

1. log4.net

के स्रोत कोड

2. बदलें समारोह FormatValue फ़ाइल log4net.Appender.AdoNetAppender.cs अंदर इस तरह डाउनलोड करें!

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