NHibernate Step by Step (三) Configuration和Sessionfactory

NHibernate Step by Step (三) Configuration和Sessionfactory
好了,我们再从头看一看Configuration,是否只能从App.config中取配置信息??
当然不是了,以下是3种最常见的配置:
<1> Configuration config = new Configuration();
这种配置方法将会到应用程序配置文件(App.Config,Web.Config)中查找NHibernate的配置信息,NHibernate的配置节必须符合应用程序配置文件个格式,前面的教程我们已经看到过了。
<2> Configuration config = new Configuration().Configure();
       这种配置方法将会在应用的相同目录查找名为”hibernate.cfg.xml”的标准Hibernate配置
       文件,格式如下:
        <3> Configuration config = new Configuration().Configure(configFileName);
<? xml version="1.0" encoding="utf-8"  ?>
< hibernate-configuration   xmlns ="urn:nhibernate-configuration-2.0"  >

       
< session-factory  name ="MySessionFactory" >

              
<!--  properties  -->
              
< property  name ="connection.provider" > NHibernate.Connection.DriverConnectionProvider </ property >
              
< property  name ="connection.driver_class" > NHibernate.Driver.SqlClientDriver </ property >
              
< property  name ="connection.connection_string" > Server=localhost;initial catalog=Hibernate;Integrated Security=SSPI </ property >
              
< property  name ="show_sql" > false </ property >
              
< property  name ="dialect" > NHibernate.Dialect.MsSql2000Dialect </ property >
              
< property  name ="use_outer_join" > true </ property >
              
< property  name ="query.substitutions" > true 1, false 0, yes 'Y', no 'N' </ property >

              
<!--  mapping files  -->
              
< mapping  assembly ="Test.Model"  />
       
</ session-factory >
</ hibernate-configuration >


      
       这种配置方法将查找指定的Hibernate标准配置文件,可以是绝对路径或者相对路径。
       另外我们还可以通过编码的方式添加配置信息:
               这种方式不够配置文件来的灵活,所以我们一般不建议使用。
Hashtable props  =  new  Hashtable();
props[“dialect”] 
=  xxxx;



config.Properties 
=  props;

 
在取得config后,我们还需要进行映射文件添加,同样,我们常用以下3种不同的方法:
<1> config.AddXmlFile(“Person.hbm.xml”);
<2> config.AddClass(typeof(Test.Model.Person));
<3> config.AddAssembly(“Test.Model”);
以上方法都可以用“阶梯式“的编码风格,如下:
        
config.AddXmlFile(“Person.hbm.xml”)

      .AddXmlFile(“User.hbm.xml”)

      .AddClass(
typeof (Test.Model.Customer));
当然,为了方便起见,我们一般把所有的影射类文件及xml文件统一放在一个程序集中,然后使用config.AddAssembly(assemblyName)的方式,让NHibernate自动去查找指定程序集中所有的映射文件和映射类。
你有没有发现在我们使用标准的hibernate配置文件时,有如下一个元素:
<!-- mapping files -->
<mapping assembly="Test.Model" />
对了,你想的不错,我们可以避免在代码中捆绑映射程序集,而在配置文件中指定,这种方式可以说是最灵活的了。
提示:在Web程序中,最好将配置文件改为config的后缀,否则在没有添加对xml的asp.net映射的情况下,你的配置文件就有可能被下载哟!!
 
我们再来看看Sessionfactory:
  
ISessionFactory sessionFactory  =  config.BuildSessionFactory();
在由Configuration构造完SessionFactory后,SessionFactory便保留了配置信息而不再需要Configuration,之后Configurationd的任何变化都不会影响到已经创建好的SessionFactory,如果你的配置信息发生变化,那么,毋庸置疑,你必须重新由Configuration构造出一个新的SessionFactory来。
注意:SessionFactory是一个Heavy Object,它不但保存了配置信息,而且还有所有的映射关系(你可以调用GetAllCollectionMetadata方法试验一下),以及需要进行总体维护的缓存等等信息,所以,我们不应该重复地创建SessionFactory对象,而应该充分共用已经创建出来的SessionFactory对象,同时,SessionFactory也是一个线程安全的对象,所以在多线程的场景下也完全可以共用。在我们实际开发中,我们可以在初始化的部分构造一个SessionFactory即可,比如,在一个公共静态类中初始化一个SessionFactory的readonly常量等等。
 
另外需要注意的是,如果你要对多个数据库进行操作,那么你可以配置针对每个数据库而创建对应的SessionFactory——大部分情况下,一个数据库对应一个SessionFactory足够使用。
 
好了,这一篇就讲这么多,我们下次再接着练习。
任何建议或者批评,请e: abluedog@163.com
posted on 2006-04-17 22:38 abluedog 阅读(3552) 评论(12)   编辑   收藏 所属分类: NHibernate
<script type=text/javascript> // </script>
评论
#2楼  2006-04-18 10:46 Terrylee
一,二还可以,三,四篇内容简单了一些,可以多写点:-)    回复   引用   查看    
#3楼 [楼主] 2006-04-18 19:48 abluedog
@Terrylee
那下次就来个长的:)    回复   引用   查看    
#4楼  2006-04-18 22:32 MS的明天
有点收获    回复   引用   查看    
#5楼  2006-04-23 10:01 深渊野鱼
对于C/S架构怎么办?
我总不可能把培植文件暴露给客户吧?
还是说可以把培植文件当作内嵌资源,然后再Load出来?
能不能有Demo    回复   引用   查看    
#6楼  2006-06-21 13:58 main
对NHIBIERNATE的配置没有办法搞吧,要暴露了。.hbm,就不要了,作为内嵌资源了吧    回复   引用   查看    
#7楼  2006-11-18 12:52 刘寅
真的不错..学习中    回复   引用   查看    
#8楼  2006-11-26 11:29 IT猎人
如何配置连接多个数据库,在hibernate.cfg.xml中这样配置:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
<session-factory name="NHibernate.Test1">
......
</session-factory>
<session-factory name="NHibernate.Test2">
......
</session-factory>
</hibernate-configuration>

Configuration cfg = new Configuration().Configure();
时,提示出错.
请问要如何配置多数据库???    回复   引用   查看    
#9楼 [未注册][TrackBack] 2007-03-14 00:10 thh
[引用提示]thh引用了该文章, 地址: http://www.cnblogs.com/thh/archive/2007/03/13/673703.html    回复   引用   查看    
#10楼 [未注册] 2007-04-19 21:40 Aloha_Ajax
<!-- mapping files -->
<mapping assembly="Test.Model" />
请问这个名为 Test.Model 的程序集来自何方?
谢谢!~
   回复   引用   查看    
#11楼 [未注册][TrackBack] 2007-07-15 13:38 大冰
NHibernateStepbyStep(三)Configuration和Sessionfactory NHibernateStepbyStep(三)
[引用提示]大冰引用了该文章, 地址: http://www.cnblogs.com/hanbing768/archive/2007/07/15/818681.html    回复   引用   查看    
#12楼 [未注册][TrackBack] 2007-07-15 13:38 大冰
NHibernateStepbyStep(三)Configuration和Sessionfactory NHibernateStepbyStep(三)
[引用提示]大冰引用了该文章, 地址: http://www.cnblogs.com/hanbing768/articles/818681.html    回复   引用   查看    
#1楼  2006-04-18 10:22 烙饼
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值