zoukankan      html  css  js  c++  java
  • NHibernate扩展:FluentNHibernate基础教程

    http://www.cyqdata.com/nhibernate/article-detail-2523

     

    经过大大小小的项目之后,在在DevText项目中使用下Fluent NHibernate,今天给大伙介绍一下Fluent NHibernate,以及使用这个有什么好处及带来什么方便!

    以下为介绍内容

    一:Fluent NHibernate基础介绍

    Fluent NHibernate提供了一个方法让你不再需要去写NHibernate的标准映射文件(.hbm.xml),而是可以把你的映射文件都使用C#来写。这样做,方便了我们的代码重构,提供了代码的易读性,并精简了项目代码。

    它还包含了如下几个工具:

    image

    Fluent NHibernate是NHibernate核心代码的扩展,完全兼容NHibernate2.X。

     

    二:使用Fluent NHibernate的好处是?

    NHibernate就不用说了,大家都知道是一个好的ORM工具,它的mapping都是以XML格式定义的。每个类都有一个mapping文件映射到数据库对应的表。 Fluent NHibernate取消了这些xml文件。

    为什么要取代XML文件呢?

    a.XML不是实时编译的。当你的XML配置文件有错误时,你只有在运行时才能看到哪里出错。

    b.XML是非常繁琐的。的确在NHibernate中的配置文件,xml节点非常简单,但是仍然掩盖不了XML文件本身的繁琐性。

    c.映射文件中重复的属性设置。比如在xml中我们需要设置每个string类型的字段都不允许为空,长度大于1000,int型都得有个默认值为-1,这样最终的xml配置文件你会发现有很多的重复工作。

    Fluent NHibernate如何克服这些缺陷呢?

    Fluent NHibernate把这些配置为文件都转化为了C#代码,这样可以让你的mapping直接在编译时就完成。

    下面是传统的HBM XML mapping文件和Fluent NHibernate的对比。

    image

    Fluent NHibernate的下载地址:http://github.com/jagregory/fluent-nhibernate

    三:一个简单的Fluent NHibernate的示例

    前面只是大致的说明了为什么要用Fluent NHibernate。现在我们来模拟一个场景,看看如何在项目中使用Fluent NHibernate。

    我们场景中有Employee, Store何Product这几个实体,product和Store之间是多对多的关系。

    File:FirstProjectSchema.png

    实体的类如下:

    Employee:

    image

    Product:

    image

    Store:

    image

    如果是使用NHibernate,那么接下来我们只能配置痛苦的XML文件,不过用FLuent NHibernate我们就不需要写配置文件了,只需要简单的写C#代码就OK了。

    说实话这个和CTP4中的mapping方式特像。

    先来看看Employee的mapping文件:

    image

    很明显这里的Map方法相当于XML配置文件的Property,而Reference相当于Many-To-One。

    Product的Mapping如下:

    image

    这里的HasManyToMany相当于NHibernaet中的Many-To-Many。

    4.下一步是创建数据库和SessionFactory:

    创建一个数据库:

    image

    SessionFacotry:

    image

    这里的数据库连接我使用的是直接输入Server,db,username,pwd等,FluentNHibernate还支持其它各种数据库连接形式:

    image

    最后是添加记录:

    image

    运行程序,数据库中表会自动创建,且数据添加成功。

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2548370.html
Copyright © 2011-2022 走看看