在Nhibernate.Burrow中使用Fluent NHibernate

在web开发中使用Nhibernate.Burrow可以在数据库session和事务管理上节省不少力气, 最近又开始用Nhibernate了,结果发现一个不错的东西:Fluent NHibernate,它非常Cool! 我一直不喜欢写hbm映射xml,改用NHibernate.Mapping.Attributes感觉还不错,但遇到Fluent NHibernate之后就立刻把NHibernate.Mapping.Attributes抛到一边去了~~~

 

现在想在项目中同时使用Burrow和Fluent,让他们协作还是需要做一点工作的,参考我以前使用NHibernate.Mapping.Attributes的方式,只需要做如下修改:

 

ExpandedBlockStart.gif 代码
 1  <? xml version="1.0" encoding="utf-8"  ?>
 2  < configuration >
 3     < configSections >
 4       < section  name ="NHibernate.Burrow"  type ="NHibernate.Burrow.Configuration.NHibernateBurrowCfgSection,NHibernate.Burrow"  restartOnExternalChanges ="true"   />
 5     </ configSections >
 6     < NHibernate.Burrow  customConfigurator ="cmscs.bll.BurrowConfigurator,cmscs.bll"
 7                       conversationCleanupFrequency ="5"  
 8                       conversationTimeOut ="30"  
 9                       manualTransactionManagement ="false" >
10       < persistenceUnits >
11         < add  name ="cmscs1"  nh-config-file ="database.cmscs1.xml"   />
12         < add  name ="cmscs2"  nh-config-file ="database.cmscs2.xml"   />
13         < add  name ="cmscs3"  nh-config-file ="database.cmscs3.xml"   />
14       </ persistenceUnits >
15     </ NHibernate.Burrow >
16  </ configuration >

这里面只需要添加一个customConfigurator="cmscs.bll.BurrowConfigurator,cmscs.bll" ,customConfigurator 会通知Burrow在初始化的时候实例化指定的对象来配置Burrow和Nhibernate.

 

cmscs.bll.BurrowConfigurator必须要实现NHibernate.Burrow.IConfigurator接口.

 

 1  using  NHibernate.Burrow;
 2  using  NHibernate.Cfg;
 3  using  FluentNHibernate;
 4  using  cmscs.entity;
 5 
 6  namespace  cmscs.bll
 7  {
 8       ///   <summary>
 9       ///  自定义配置burrow
10       ///   </summary>
11       public   class  BurrowConfigurator : IConfigurator
12      {
13           private   static   bool  _isSet;
14 
15           #region  IConfigurator 成员
16 
17           public   void  Config(IBurrowConfig val)
18          {
19               // 可以在这里重新设置Burrow配置参数;
20               // val.ConversationTimeOut = 60;
21               // val.ConversationCleanupFrequency = 5;
22               // val.ManualTransactionManagement = false;
23          }
24 
25           ///   <summary>
26           ///  配置nhibernate
27           ///   </summary>
28           ///   <param name="puCfg"></param>
29           ///   <param name="nhCfg"></param>
30           public   void  Config(IPersistenceUnitCfg puCfg, Configuration nhCfg)
31          {
32               // 由于Burrow会在每个数据库连接上调用此方法,并且我只想在第一个数据库连接上做映射关系配置,所以做了个检测
33               if  (_isSet)
34                   return ;
35              _isSet  =   true ;
36 
37               // 这里直接使用FluentNHibernate处理实体类映射,AddMappingsFromAssembly是FluentNHibernate提供的扩展方法.
38               // BaseEntity<>与FluentNHibernate映射类在同一个程序集中.
39              nhCfg.AddMappingsFromAssembly( typeof (BaseEntity <> ).Assembly);
40 
41               // 如果使用NHibernate.Mapping.Attributes处理实体类映射的话可以这样操作
42               // HbmSerializer.Default.Validate = true;
43               // var stream = HbmSerializer.Default.Serialize(System.Reflection.Assembly.Load(EntityAssemblyName));
44               // nhCfg.AddInputStream(stream);
45 
46           #endregion
47      }
48  }

 

好了,最后如需根据映射关系导出Schema脚本的话,无需再请Fluent NHibernate可以这样做.

 1              var bf  =   new  BurrowFramework();
 2              var nhcfg  =  bf.BurrowEnvironment.GetNHConfig(DefaultConnectionName);
 3              var export  =   new  SchemaExport(nhcfg);
 4               try
 5              {
 6                  export.SetOutputFile(fileName);
 7                  export.Create( false false );
 8              }
 9               catch  (Exception ex)
10              {
11                   throw   new  Exception( " 无法输出创建数据脚本。 " , ex);
12              }


 

 

转载于:https://www.cnblogs.com/xwing/archive/2010/08/10/1797007.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值