Fluent NHibernate的初识

  因为开始学NHibernate不久,对NHibernate的框架并不是很熟悉,学习Fluent Nhibernate也是一个朋友推荐的,想必大家或多或少都有点认识,没有学习Fluent Nhibernate前所有的映射文件都是用传统的xml文件配置进行映射的,如下配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly
="NHibernateSample.Domain"
namespace="NHibernateSample.Domain.Entities">
<class name ="Customer">
<id name="Id" column ="CustomerId">
<generator class ="native"/>
</id>
<property name ="FirstName"/>
<property name ="LastName"/>
</class>
</hibernate-mapping>

   而Fluent Nhibernate的配置如下:

  public CustomerMap()
{
Id(m
=> m.Id);
Map(m
=> m.LastName);
Map(m
=> m.FirstName);
}

   我们只需要继承Fluent Nhibernate的ClassMap<T>类,然后在构造方法中完成映射方法,就能完成映射了。FluentNhibernate这种用编程的方式配置映射,省去编写复杂的映射文件,它能完全替换NHibernate的映射文件,让你在映射的时候能使用C#的强类型方式。

  它的Dll可以从这里下载:

  下载地址:http://fluentnhibernate.org/

  在NHibernate中,ISession是操作数据的核心,我们需要通过ISessionFactory来建造ISession来进行数据的交互.

private ISessionFactory GetSessionFactory()
{
//传统方式
//return (new Configuration()).Configure().BuildSessionFactory();

//自动映射映射
//var sessionFactory = Fluently.Configure(new NHibernate.Cfg.Configuration().Configure())
// .Mappings(m =>
// m.AutoMappings.Add(AutoMap.AssemblyOf<Customer>()))
// .BuildSessionFactory();
//return sessionFactory;

//手动配置映射
var sessionFactory = Fluently.Configure(new NHibernate.Cfg.Configuration().Configure())
.Mappings(m
=>
m.FluentMappings
.AddFromAssemblyOf
<Customer>())
.BuildSessionFactory();
return sessionFactory;

}

   这里罗列出来了三种创建ISessionFactory的方式,还有很多就不一一罗列出来了。之所以要列出这三种,因为这代表了三种不同情况。
 先说第一种:

    private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}

  这种是用xml配置映射的一种情况,就不多说了。

  第二种情况:

     private ISessionFactory GetSessionFactory()
{
//自动映射映射
var sessionFactory = Fluently.Configure(new NHibernate.Cfg.Configuration().Configure())
.Mappings(m
=>
m.AutoMappings.Add(AutoMap.AssemblyOf
<Customer>()))
.BuildSessionFactory();
return sessionFactory;
}

  就是配置用Fluent Nhibernate自动映射的情况了,之所以说是自动映射,那是因为它只需要继承Fluent Nhibernate的ClassMap<T>类,而不需要在构造方法中完成映射方法,Fluent Nhibernate本身框架会帮你完成映射。也许大家会想这不是很好,可以省略映射方法,这样开发效率不就提高了。但事态就是这样,有利就有弊,采用这种情况数据库表里的字段就得按Fluent Nhibernate框架自动映射所要求规范设计了,这样一来可伸缩性就弱了。

  第三种情况:

    public ISessionFactory GetSessionFactory()
{
//手动映射
var sessionFactory = Fluently.Configure(new NHibernate.Cfg.Configuration().Configure())
.Mappings(m
=> m.FluentMappings.AddFromAssemblyOf<Customer>())
.BuildSessionFactory();
return sessionFactory;
}

  这种情况就是需要继承Fluent Nhibernate的ClassMap<T>类,然后在构造方法中完成映射方法来完成映射。这样创建ISessionFactory就可以自己写映射方法来完成映射,这样程序的可伸缩性就强了。  

  时间问题,应用这块就下次再来分享了。

参考博客:http://www.cnblogs.com/inday/archive/2009/08/04/Study-Fluent-NHibernate-Start.html    

          http://www.cnblogs.com/lyj/archive/2010/05/12/inside-nh3-mapping-map.html

原文地址:https://www.cnblogs.com/chenyt/p/1913038.html