Configuring NHibernate using ConfORM Mappings
使用ConfORM映射配置NHibernate
正如第一章中所示,ConfORM基于约定来生成HbmMapping对象,这些对象可以被直接添加到NHibernate配置中.本节介绍如何使用ConfORM映射配置NHibernate.
准备
1. 完成第一章中Complete Mapping with ConfORM小节中Eg.ConfORMMappings项目的模式和映射部分.
2. 在你的解决方案中添加一个名为ConfigWithConfORM的控制台项目.
3. 将她设置为启动项目.
4. 为该项目添加NHibernate.dll和NHibernate.ByteCode.Castle.dll引用,这两个文件在Lib文件夹中.
5. 为该项目添加到Eg.ConfORMMappings 的引用.
步骤
1. 添加一个App.config文件如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/> </configSections> <connectionStrings> <add name="db" connectionString="Server=.\SQLExpress; Database=NHCookbook; Trusted_Connection=SSPI"/> </connectionStrings> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </property> <property name="dialect"> NHibernate.Dialect.MsSql2008Dialect, NHibernate </property> <property name="connection.connection_string_name"> db </property> <property name="adonet.batch_size"> 100 </property> </session-factory> </hibernate-configuration> </configuration>
2. 打开Program.cs,添加如下using语句:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
using Eg.ConfORMMapping.Mappings; using NHibernate.Cfg;
3. 在Main函数中添加下面的代码以完成对NHibernate的配置:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
var mappingFactory = new MappingFactory(); var mapping = mappingFactory.CreateMapping(); var nhConfig = new Configuration().Configure(); nhConfig.AddDeserializedMapping(mapping, null); var sessionFactory = nhConfig.BuildSessionFactory(); Console.WriteLine("NHibernate configured!"); Console.ReadKey();
4. 编译运行,可以看到提示文本NHibernate Configured!.
原理
在这个示例中,App.config和第一个配置示例中的App.config几乎完全相同.只是将<mapping>元素移除,该元素是用来告诉NHibernate从哪个程序集中加载映射(嵌入式的hbm.xml文件). 现在我们使用ConfORM来为我们的实体类模型创建HbmMapping对象.我们创建了MappingFactory并调用了她的CreateMapping方法.
然后,我们生成了NHibernate配置对象,并从App.config中加载了她的配置(使用App.config来配置她).
调用AddDeserializedMapping才是本示例的关键所在. 如该方法的名字所示,她确实是一个被并行化的XML映射,除非该映射是用code而非XML来生成的。 事实上, 我们可以用.NET XmlSerializer去串行化一个HbmMapping对象,以获得一个(人)可读的XML映射.
扩展
配置NHibernate时,与使用普通的嵌入式XML映射相比,使用code来生成的映射,会在速度上得到了提升。至于Fluent NHibernate也是会将映射串行化到XML文件中,以便NHibernate将她们并行化.