Nhibernate中的多数据库支持实现方法


先配制 NHibernate Burrow

  添加web.config配置信息,读取配置和assembly

  <configSections>

  <section name="NHibernate.Burrow" type="NHibernate.Burrow.Configuration.NHibernateBurrowCfgSection" />

  </configSections>

  <NHibernate.Burrow >

  <persistantUnits>

  <add name="PersistenceUnit1" nh-config-file="hibernate.cfg.xml" />  //第一个数据库

  <add name="PersistenceUnit2" nh-config-file="hibernate2.cfg.xml" />  //第二个数据库

  。。。。。。//可加多个

  </persistantUnits>

  </NHibernate.Burrow>

  再添加HttpModule Setting 用于管理会话和事务

  <httpModules>

  <add name="NHibernate.Burrow.WebUtil.HttpModule" type="NHibernate.Burrow.WebUtil.WebUtilHTTPModule,NHibernate.Burrow.WebUtil"/>

  </httpModules>

  最主要的实现原理就就 先建一个单例的PersistenceUnitRepo类(其实就PersistenceUnit 的集合,存有所有PersistenceUnit 对象),用来保存PersistenceUnit,

  PersistenceUnit对象就是上面的一个<add name="PersistenceUnit1" nh-config-file="hibernate.cfg.xml" />它保存有

  public string Name {

  get { return configuration.Name; }

  }

  internal ISessionFactory SessionFactory {

  get { return sessionFactory; }

  }

  /// <summary>

  /// The nhibernate configuration of this session Manager

  /// </summary>

  public Cfg.Configuration NHConfiguration {

  get { return nHConfiguration; }

  }

  然后一个就是如何操作的问题,我们可以使用NHibernate.Burrow.AppBlock.DAOBases中的 GenericDAO<ReturnT>类来调用

  其实现调用主要是这段代码来实现的

  internal PersistenceUnit GetPU(System.Type t) {

  if(PersistenceUnits.Count == 0)

  throw new PersistenceUnitsNotReadyException();

  if (PersistenceUnits.Count == 1)

  return PersistenceUnits[0];

  foreach (PersistenceUnit pu in persistenceUnits) {

  ISessionFactoryImplementor sfi = (ISessionFactoryImplementor) pu.SessionFactory;

  try

  {

  if (sfi.GetEntityPersister(t.FullName) != null)  //找到所要找的方法

  return pu;

  }

  catch { }

  }

  throw new GeneralException("Persistence Unit cannot be found for " + t);

  }

  遍例每一个PersistenceUnit  直到找到所要找的方法,最后返回这个方法所在的PersistenceUnit , 在PersistenceUnit 中就有ISessionFactory ,如没有的话就抛出错误


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3