迷恋弦哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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文件如下:

View Code
<?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语句:

View Code
using Eg.ConfORMMapping.Mappings;
using NHibernate.Cfg;

3.   在Main函数中添加下面的代码以完成对NHibernate的配置:

View Code
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将她们并行化.

posted on 2012-07-09 00:04  迷恋弦哥  阅读(242)  评论(0编辑  收藏  举报