在unique4net中使用uniqueidentifier/guids作为自定义属性

Per*_*eck 9 .net log4net uniqueidentifier

我正在尝试添加一个自定义属性,这是一个guid,但它给了我这个错误:

System.InvalidCastException:无法将参数值从String转换为Guid.---> System.InvalidCastException:从'System.String'到'System.Guid'的无效转换.

我在配置中指定了这个:

<parameter>
<parameterName value="@id" />
<dbType value="Guid" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{id}" />
</layout>
</parameter>
Run Code Online (Sandbox Code Playgroud)

我使用的实际代码(片段)是这样的:

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

有什么帮助吗?:)数据库中的id字段被定义为唯一标识符NOT NULL,但它没有主键约束.

Cla*_*sen 24

对于您的示例,以下应该有效:

<parameter>
<parameterName value="@Oid" />
<dbType value="Guid" />
<layout type="log4net.Layout.RawPropertyLayout">
<key value="Id" />
</layout>
</parameter>
Run Code Online (Sandbox Code Playgroud)

重要的是你将@id重命名为其他东西,否则你将在数据库中获得Null值,即使你试图插入字符串,

然后使用RawPropertyLayout存储,cus你不需要做转换.

  • 为清楚起见,&lt;key&gt; 是要在 LoggingEvent Properties 集合中查找的值的名称。 (2认同)