zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C++自定义一个foreach宏,偷偷懒
    线程池介绍与示例
    iOS消息中心与传感
    new 和 malloc 申请内存失败的区别处理
    iOS调试技巧——当程序崩溃的时候怎么办
    随机数原理
    iOS麦克风运用——腾讯微博“吹一吹”
    个人技术博客
    SDN第一次作业
    GitKraken 团队项目使用教程
  • 原文地址:https://www.cnblogs.com/chenyt/p/1913038.html
Copyright © 2011-2022 走看看