美国银行卡Payoneer注册奖励25美元
posts - 85,  comments - 1230,  views - 104万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

12月份项目比较忙,周末都给占了。今天终于算是比较清闲了。之前因为在DevText项目中使用Fluen NHibernate,顺便就学习了下。今天就结合官方网站的介绍来给大家分享下为什么我们要用Fluent NHibernate。

  

1.Fluent NHibernate是什么?

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

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

image

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

 

2.为什么要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

 

3.使用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

 

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

 

参考: http://wiki.fluentnhibernate.org/Getting_started#Your_first_project

          http://wiki.fluentnhibernate.org/Database_configuration

          http://wiki.fluentnhibernate.org/Fluent_configuration

Nick

posted on   Nic Pei  阅读(15456)  评论(22编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示