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

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

以下为介绍内容:

一:Fluent NHibernate基础介绍

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

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

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的对比。

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

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

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

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

实体的类如下:

Employee:

Product:

Store:

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

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

先来看看Employee的mapping文件:

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

Product的Mapping如下:

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

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

创建一个数据库:

SessionFacotry:

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

最后是添加记录:

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

NHibernate扩展:FluentNHibernate基础教程相关推荐

  1. Chrome扩展开发基础教程(附HelloWorld)

    1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...

  2. php twig扩展,Symfony2基础教程之添加Twig的Filter扩展

    在Symfony2中添加Twig是个非常简单的事情,在安装sonata-media-bundle的时候 , 发现dev版本没有看到一个叫"number_format_decimal" ...

  3. Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  4. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  5. iPhone开发四剑客之《Objective-C基础教程》

    iPhone 开发四剑客之<Objective-C 基础教程> Objective-C 语言是 C 语言的一个扩展集,许多(可能是大多数)具备 Mac OS X 外观的应用程序都是使用该语 ...

  6. AndoridSQLite数据库开发基础教程(5)

    AndoridSQLite数据库开发基础教程(5) 创建SQLite数据库 使用SQLiteManager创建数据库的操作步骤如下: (1)双击SQLiteManager工具,弹出SQliteMana ...

  7. python基础教程博客_python基础教程(一)

    之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是 ...

  8. Spring Boot 2.x基础教程:使用国产数据库连接池Druid

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  9. Spring Cloud Alibaba基础教程:Sentinel Dashboard同步Apollo存储规则

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 在之前的两篇教程中我们分别介绍了如何将Sentinel的限流规则存储到Nacos和Apollo中.同时 ...

最新文章

  1. 全文索引的使用(MySQL)
  2. 使用命令行建立Zend Framework项目
  3. 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
  4. 一加7pro保存的录音文件在哪一个文件夹?
  5. DELPHI10.2的LINUX数据库开发环境配置
  6. css对大小写不敏感
  7. python中的__file__、os.path.realpath(__file__)、os.path.dirname(os.path.realpath(__file__))
  8. 软件测试学习视频教程-精通软件测试教程
  9. CAD二次开发高版本调用内部命令AcedCmdS和AcedCmdC
  10. crontab一些常用的语法 每天凌晨1点重启一遍
  11. 1007 Problem H A+B 输入输出练习VIII
  12. VTK 学习----3D基础知识-着色器和图形管道
  13. Android:禁止APP录屏和截屏
  14. 王者荣耀英雄皮肤官方高清图片爬虫
  15. 163.net邮箱个人登录入口攻略,轻松助你使用邮箱客户端
  16. 树莓派项目实践 [1] —— 编程控制继电器组件实现电路开闭(C语言)
  17. python百度、必应、搜狗根据关键字爬取图片
  18. 测试相关网址--自动化/
  19. win 程序32位或者64程序如何区分
  20. 目录树结构的数据库设计思考

热门文章

  1. Javascript Math ceil()、floor()、round()三个函数的区别
  2. 新年礼物 总算有服务器了
  3. Go实现Raft第一篇:介绍
  4. 求解一元二次方程的简单c语言程序
  5. 工程师软技能6:理财人生精神
  6. 2020重学Go系列:反引号的妙用—结构体里的 Tag 标签
  7. window下nginx反向代理配置
  8. laravel关于路径的函数
  9. Android ActionBar高级自定义——设置标题居中和添加控件
  10. 对android中ActionBar中setDisplayHomeAsUpEnabled和setHomeButtonEnabled和setDisplayShowHomeEnabled方法的理解