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

本文关键字:对象 日志 记录 数据库 自定义 我的 NHibernate 映射 使用 | 更新日期: 2023-09-27 18:13:52

我在我的项目中使用log4net以及NHibernate。每个记录的信息片段都存储为MyLog对象的一个实例,该对象已经是一个带有映射、表等的NHibernate实体。我还需要从数据库中加载日志并将其显示给用户,这就是为什么NHibernate方法看起来非常方便。

使用下面描述的AdoNetAppender设置登录到数据库并不困难:

如何使用Log4Net工具使用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 ?

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

我建议将日志记录和应用程序分开。日志记录不应该以映射的形式依赖于应用程序。如果您在应用程序中破坏了某些东西,日志记录应该会继续工作。对日志表有两个映射看起来是双重的。但是他们多久会改变一次呢?如果您只想使用nhibernate来访问数据库,您可以编写一个自定义appender来实现此目的。