NHibernate中使用Guid作为主键、项目中NHibernate与Log4net共存

在NHibernate中使用Guid作为主键需要注意几点:

1. 数据库中Guid类型为uniqueidentifier,同时必须给定默认值。

2. 生成的实体类中类型为System.Guid

3. 生成的Mapping文件中id对应的class为guid<注意大小写>,id对应的class还有几种不同类型,分别代表不一样的意义,自己Google一下。

4. 使用ISession.Save()后同时还要使用ISession.Flush()<否则数据无法保存进数据库>,至于Flush方法作用,自己Google一下。

网站中同时使用NHibernate和Log4net

1. NHibernate3.0以前的版本都是使用Log4net来记录日志,打3.0开始,它便有了自己的日志记录器

2. 如果项目中即使用了NHibernate,也使用了Log4net,这时在Log4net的配置文件中就要为NHibernate设定相应的配置节,我想它们有点像情侣分手后还偶尔寂莫上上床感觉差不多,呵呵,感觉不干不净的。

3. <logger name="NHibernate" additivity="false">

        <level value="OFF" />         

    <appender-ref ref="RollingLogFileAppender" />     

  </logger>     

  <logger name="NHibernate.SQL" additivity="false">         

    <level value="OFF" />         

    <appender-ref ref="RollingLogFileAppender" />     

  </logger>

   3.1 上面的两个logger的配置不能少,否则当你有写入logger的动作时,NHibernate就会报错了,而且报错级别是整个进程级别的,不重启WEB服务是不会好的

   3.2 第一个logger的level级别不能大于WARN,否则会出现与3.1类似的错误

   3.3 如果你想关闭NHibernate的日志写入,那就将两个logger的level都设置为OFF吧!

附上完整的Log4net.config文件

  
    
<? xml version = " 1.0 " ?>
< log4net xsi:noNamespaceSchemaLocation = " http://csharptest.net/downloads/schema/log4net.xsd " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " >
<!-- 定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。 -->
< root >
< level value = " ALL " />
< appender - ref ref = " LogFileAppender " />
<!--< appender - ref ref = " ConsoleAppender " />
< appender - ref ref = " EventLogAppender " />
< appender - ref ref = " RollingLogFileAppender " />-->
</ root >
< logger name = " NHibernate " additivity = " false " >
< level value = " OFF " />
< appender - ref ref = " RollingLogFileAppender " />
</ logger >
< logger name = " NHibernate.SQL " additivity = " false " >
< level value = " OFF " />
< appender - ref ref = " RollingLogFileAppender " />
</ logger >
< appender name = " LogFileAppender " type = " log4net.Appender.FileAppender " >
< file value = " e:\log.log " />
< layout type = " log4net.Layout.PatternLayout " >
<!-- 每条日志末尾的文字说明 -->
< footer value = " [Footer]--Test By Lucky.zeng " />
<!-- 输出格式
每种转换符号都以
% 开始,后面跟着一个格式符号和换符号。
%- 数字  :该项的最小长度,小于最小长度的用空格填充
% m(message) :输出的日志消息
% n( new line) :换行
% d(datetime) :输出当前语句运行的时刻
% r(run time) :输出程序从运行到执行到当前语句时消耗的毫秒数
% t(thread id):当前语句所在的线程ID
% p(priority) : 日志的当前优先级别,即DEBUG、INFO、WARN…等
% c( class ) :当前日志对象的名称,
% L(line ) :输出语句所在的行号
% F(file name):输出语句所在的文件名
% logger 日志名称
-->
< conversionPattern value = " 时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline " />
</ layout >
</ appender >
<!-- 定义输出到控制台命令行中 -->
< appender name = " ConsoleAppender " type = " log4net.Appender.ConsoleAppender " >
< layout type = " log4net.Layout.PatternLayout " >
<!-- conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline " /-->
< conversionPattern value = " 时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline " />
</ layout >
</ appender >
<!-- 定义输出到windows事件中 -->
< appender name = " EventLogAppender " type = " log4net.Appender.EventLogAppender " >
< layout type = " log4net.Layout.PatternLayout " >
< conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %message%newline " />
</ layout >
</ appender >
<!-- RollingFileAppender是输出源也是输出到文件中,只是以自增长的方式 -->
< appender name = " RollingLogFileAppender " type = " log4net.Appender.RollingFileAppender " >
< param name = " File " value = " log/system_log_ " />
<!-- 是否覆盖 -->
< param name = " AppendToFile " value = " true " />
<!-- 设置无限备份 =- 1 ,最大备份数为1000 -->
< param name = " MaxSizeRollBackups " value = " 100 " />
<!-- 每个文件的最大20k -->
< param name = " MaximumFileSize " value = " 1KB " />
<!-- 名称是否可以更改 为false为可以更改 -->
< param name = " StaticLogFileName " value = " false " />
<!-- 文件名称 -->
< param name = " DatePattern " value = " yyyyMMdd&quot;.log&quot; " />
< param name = " RollingStyle " value = " Date " />
< layout type = " log4net.Layout.PatternLayout " >
<!-- conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline " /-->
< conversionPattern value = " 时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline " />
</ layout >
</ appender >
</ log4net >


你可能感兴趣的:(Hibernate)