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/archive/2010/12/21/1913038.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值