NHibernate Step by Step (三) Configuration和

系统 1586 0

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 配置

文件,格式如下:

<? xmlversion="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;initialcatalog=Hibernate;IntegratedSecurity=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" > true1,false0,yes'Y',no'N' </ property >

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


<3> Configuration config = new Configuration().Configure(configFileName);

这种配置方法将查找指定的 Hibernate 标准配置文件,可以是绝对路径或者相对路径。

另外我们还可以通过编码的方式添加配置信息:

Hashtableprops = 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

ISessionFactorysessionFactory = 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

NHibernate Step by Step (三) Configuration和Sessionfactory


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论