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-configurationxmlns="urn:nhibernate-configuration-2.0">
<session-factoryname="MySessionFactory">
<!--properties-->
<propertyname="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<propertyname="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<propertyname="connection.connection_string">Server=localhost;initialcatalog=Hibernate;IntegratedSecurity=SSPI</property>
<propertyname="show_sql">false</property>
<propertyname="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
<propertyname="use_outer_join">true</property>
<propertyname="query.substitutions">true1,false0,yes'Y',no'N'</property>
<!--mappingfiles-->
<mappingassembly="Test.Model"/>
</session-factory>
</hibernate-configuration>
<3> Configuration config = new Configuration().Configure(configFileName);
这种配置方法将查找指定的Hibernate标准配置文件,可以是绝对路径或者相对路径。
另外我们还可以通过编码的方式添加配置信息:
Hashtableprops=newHashtable();
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"教程中,你将逐步学习如何设置项目环境,配置NHibernate,创建映射文件,使用Session和SessionFactory进行基本的CRUD操作,以及如何进行复杂查询。此外,codesmith工具的提及可能意味着...
### NHibernate Step by Step 教程知识点概览 #### 一、环境搭建与配置 - **NHibernate**:NHibernate 是一个开源的对象关系映射器(Object-Relational Mapper,ORM),它允许开发者以面向对象的方式操作关系型...
然后,使用`NHibernate.Cfg.Configuration`类加载配置,并创建会话工厂。 6. **使用LINQ查询**: 有了会话工厂,你可以创建一个`ISession`实例,然后在上面使用LINQ查询。例如,获取所有用户: ```csharp using...
在这个NHibernate配置的第三部分中,我们将深入理解如何设置和加载配置以及如何处理映射文件。 首先,NHibernate的配置可以通过多种方式实现。下面列出了三种常见的配置方法: 1. `Configuration config = new ...
### Nhibernate常见的三种配置方法 在软件开发过程中,Nhibernate作为一种流行的对象关系映射(ORM)工具,其强大的功能可以帮助开发者更高效地完成数据持久化工作。然而,如何正确配置Nhibernate成为了许多开发...
通过这个简单的Nhibernate三层架构实例,初学者可以理解如何在实际项目中整合ORM框架和分层设计原则,以实现高效、可维护的应用程序。随着经验的积累,开发者还可以探索更高级的概念,如拦截器、事件监听器和多态性...
**Nhibernate三层架构详解** Nhibernate是一款强大的对象关系映射(ORM)框架,它能够将数据库中的表映射为C#类,从而简化数据库操作。在开发大型应用时,通常会采用三层架构来提高代码的可维护性和可扩展性。三层...
9. **缓存机制**:NHibernate内置了第一级缓存(Session级别)和第二级缓存(SessionFactory级别),提高数据访问效率。还可以集成第三方缓存服务,如Memcached或Redis。 10. **性能优化**:理解何时使用Flush模式...
#### 三、NHibernate的安装与配置 为了开始使用NHibernate,首先需要准备以下工具和资源: 1. **NHibernate**:可以从官方网站[www.nhibernate.org](http://www.nhibernate.org/)下载最新版本。当前版本为1.0.2。 ...
Nhibernate拥有丰富的第三方插件和扩展,如FluentNHibernate简化配置,NHibernate Profiler帮助调试性能问题等。同时,活跃的社区提供了大量的文档、教程和问题解答资源,有助于开发者快速上手和解决问题。 总之,...
这个用户管理系统是一个典型的Nhibernate应用实例,对于学习和理解Nhibernate的使用,以及三层架构的组织结构,是非常有价值的参考资料。通过深入研究,开发者不仅可以提升Nhibernate的技能,还能学习到如何构建可...
4. **NHibernate配置**:示例可能包含NHibernate的配置文件,定义了数据库连接字符串、映射文件等信息,展示了如何设置和初始化NHibernate SessionFactory。 5. **NSpring配置**:NSpring的配置文件会定义bean的...
通过这个Nhibernate的demo,开发者可以学习如何配置多数据库环境,如何定义实体和映射,如何创建和使用SessionFactory,以及如何利用查询API进行数据操作。此外,还可以了解到如何处理事务和优化性能,这些都是使用...
Spring.NET和NHibernate是两个非常重要的.NET框架,用于构建企业级的、面向服务的应用程序。Spring.NET是一个开源的IOC(Inversion of Control)容器,它提供了依赖注入、AOP(面向切面编程)以及一系列其他高级特性...
3. **创建 SessionFactory**:配置完成后,通过调用 `configuration.BuildSessionFactory()` 创建 SessionFactory。SessionFactory 是线程安全的,通常在整个应用程序生命周期内只创建一次。 4. **使用 Session**:...
在这个“NHibernate 3.2实例”中,我们将深入探讨这个版本的核心特性和如何进行映射配置,特别是通过代码(Mapping by Code)的方式。 在NHibernate 3.2中,映射是定义对象与数据库表之间关系的关键步骤。传统的...
通过以上详细解析,我们可以看出,该文档提供了一个基于Nhibernate的三层架构设计范例,不仅详细阐述了每一层的具体职责和技术实现,还分析了这种架构的优点与不足之处,为后续的项目开发提供了宝贵的参考价值。
总之,这个项目为初学者提供了一个了解三层架构和NHibernate的良好起点。通过实践这个项目,你可以学习到如何在VS2010中构建一个简单的WinForm应用,以及如何利用三层架构和ORM工具提升开发效率和代码质量。对于...