因为开始学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