天天看點

整合NHibernate到Spring.Net (之一)

有這段文字的惟一原因是因為spring.net尚遠遠沒有完成。是以,借鑒spring (java)的LocalSessionFactoryObject,我們在.net中建立一個LocalSessionFactoryObject

注:在Spring.Net的開發計劃中,第一個版本僅會完成aop和ioc功能,即現在在cvs上大家看到的Spring.Context,Spring.AOP,Spring.Core三個項目。下面的Spring.Data是我自行建立的,用來遷移一些項目中所必須用到的東西。

LocalSessionFactoryObject的作用

LocalSessionFactoryObject将NHibernate的配置整合到Spring中,是以,你不在需要app.config中配置nhibernate的屬性,也無需将hbm xml檔案設定為嵌入

LocalSessionFactoryObject有兩個重要屬性。MappingResources是一個IList,是一系列hbm檔案的清單,而HibernateProperties則是一個IDictonary,存放NHibernate的設定

<object name="mySessionFactory" class="Spring.Data.Hibernate.LocalSessionFactory,Spring.Data">

  <property name="MappingResources">

   <list>

    <value>customer.hbm.xml</value>

    <value>color.hbm.xml</value>

   </list>

  </property>

  <property name="HibernateProperties">

   <props>

    <prop key="hibernate.connection.provider">NHibernate.Connection.DriverConnectionProvider</prop> 

    <prop key="hibernate.dialect">NHibernate.Dialect.MsSql2000Dialect</prop>   

    <prop key="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</prop>

    <prop key="hibernate.connection.connection_string">Server=localhost;initial catalog=mis;User ID=sa;Password=;Min Pool Size=2</prop>

   </props>

</object>

LocalSessionFactoryObject實作了IFactoryObject接口,這意味着當從ioc擷取LocalSessionFactory的執行個體是,将調用其GetObject方法,是以,大家對這段代碼就不要有疑惑

ISessionFactory sessionFactory=(ISessionFactory)factory.GetObject("mySessionFactory");

LocalSessionFactory Object實作了IInitialObject接口,其AfterPropertiesSet方法在ioc配置屬性後調用,非常簡單

public void AfterPropertiesSet()

  {

   if (sessionFactory==null)

   {

    Configuration cfg=new Configuration();

    cfg.AddProperties(hibernateProperties);

    foreach(String hbm in mappingResources)

     cfg.AddXmlFile(hbm);

    sessionFactory=cfg.BuildSessionFactory();

   }

  }

下面是一段測試代碼

IObjectFactory factory=new XmlObjectFactory(System.IO.File.OpenRead("applicationcontext.xml"));

   Customer customer=new Customer();

   customer.Name="jjx";

   ISessionFactory sessionFactory=(ISessionFactory)factory.GetObject("mySessionFactory");

   ISession session=sessionFactory.OpenSession();

   ITransaction trans=session.BeginTransaction();

   session.Save(customer);

   trans.Commit();

   session.Close();

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911864.html,如需轉載請自行聯系原作者