使用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来访问数据库,您可以编写一个自定义appender来实现此目的。