• 在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的方式,只需要做如下修改:

    代码
     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(falsefalse);
     8             }
     9             catch (Exception ex)
    10             {
    11                 throw new Exception("无法输出创建数据脚本。", ex);
    12             }


  • 相关阅读:
    Mysql group_concat
    canvas toDataUrl 跨域问题
    Svg操作
    java 判断浏览器
    排序操作
    java 格式判断
    你真的了解 console 吗
    svg转换工具
    java图片缩放
    常见 银行贷款 名词
  • 原文地址:https://www.cnblogs.com/xwing/p/1797007.html
Copyright © 2020-2023  润新知