使用 NHibernate 流畅映射将我的自定义日志对象记录到数据库中
Logging my custom log object into database using NHibernate fluent mapping
我在我的项目中使用 log4net 以及 NHibernate。每条记录的信息都存储为 MyLog
对象的一个实例,它已经是一个 NHibernate 实体及其映射,table 等。我还需要从数据库加载日志并将其显示到用户,这就是 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
”我可以提供我的映射 class 而不是直接 SQL 命令及其所有参数,因为我必须提供 AdoNetAppender
?
我建议将您的日志记录和应用程序分开。日志记录不应以映射的形式依赖于您的应用程序。如果您破坏了应用程序中的某些内容,日志记录应该会继续工作。有两个映射到你 log table 看起来双重。但是它们多久改变一次?如果你只想使用 nhibernate 来访问数据库,你可以编写一个自定义附加程序来这样做。
我在我的项目中使用 log4net 以及 NHibernate。每条记录的信息都存储为 MyLog
对象的一个实例,它已经是一个 NHibernate 实体及其映射,table 等。我还需要从数据库加载日志并将其显示到用户,这就是 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
”我可以提供我的映射 class 而不是直接 SQL 命令及其所有参数,因为我必须提供 AdoNetAppender
?
我建议将您的日志记录和应用程序分开。日志记录不应以映射的形式依赖于您的应用程序。如果您破坏了应用程序中的某些内容,日志记录应该会继续工作。有两个映射到你 log table 看起来双重。但是它们多久改变一次?如果你只想使用 nhibernate 来访问数据库,你可以编写一个自定义附加程序来这样做。