使用NHibernate流畅映射将我的自定义日志对象记录到数据库中

时间:2015-09-22 12:27:44

标签: c# nhibernate fluent-nhibernate log4net

我在我的项目中使用log4net以及NHibernate。每条记录的信息都存储为MyLog对象的实例,该对象已经是NHibernate实体及其映射,表等。我还需要从数据库加载日志并将其显示给用户,即为什么NHibernate方法似乎非常方便。

使用此处所述的AdoNetAppender设置登录数据库并不困难:

How to use Log4Net utility for logging into database using c#

但是,我想知道为什么我必须在我的配置文件中明确配置所有列属性映射:

<commandText value="INSERT INTO log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
                <parameterName value="@log_date"/>
                <dbType value="DateTime"/>
                <layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
...

虽然我已经在我的流畅API映射中完成了它!

public LogRecordMap () {
            Table("log");
            Id(x => x.ID)
                .Column("id")
                .GeneratedBy.Native();
            Map(x => x.ObjectID)
                .Column("objectid")
                .Not.Nullable()
...

我发现它重复,因为我必须保持流畅的映射和AdoNetAppender配置。是否有“NHibernateAppender”我可以提供我的映射类而不是直接SQL命令及其所有参数,因为我必须提供AdoNetAppender

1 个答案:

答案 0 :(得分:1)

我建议您将日志记录和应用程序分开。日志记录不应以映射的形式依赖于您的应用程序。如果您在应用程序中破坏某些内容,则日志记录应继续有效有两个映射到您的日志表看起来加倍。但他们多久会改变一次?如果您只想使用nhibernate访问数据库,则可以编写自定义appender来执行此操作。