Fluent NHibernate RC 1.0 --升级内容

Fluent NHiberante(FNT) RC 1.0 已经在上个星期发布了,其中很多东西被废弃,有些方法改进,还有一些命名更贴切,虽说不是很完美,但已经做的非常完善了,如果大家在使用中,发现bug或者没有找到相应的方法,大家可以去 Fluent GoogleGroups 发贴,FNT的作者James Gregory及时回复的。

Fluent NHibernate Release Notes 1.0 : http://wiki.fluentnhibernate.org/Release_notes_1.0

FNT在映射的时候,分为Fluent Mapping(手动)和Auto Mapping(自动)两种方式,我在我的“Fluent系列”中一直使用的是手动方式,我觉得相对应的好控制,而且也让我同时能更好的学习NHibernate

Fluent Mapping

1、修改一些方法名:把一些繁琐的方法名改的相对的简单而不失其含义。

WithLengthOf -> Length

ColumnName -> Column

WithTableName -> Table

其实还有很多吧,我相信大家还是能一眼看出来的,如果你没有找到的话,你可以去GoogleGroups求助一下。

2、丢弃了SetAttribute方法:因为前几个版本的FNT还不够完善,很多NHibernate的Attribute都没有提供支持,所以作者留了这一个方法,以便开发者自定义一些attribute。这一次他们完全丢弃了SetAttribute方法,完全依赖Fluent的方式来进行实体映射,所以很多特性我也不知道如何来映射,不过这时候你还是可以区GoogleGroups求助一下,强烈建议大家把它收藏一下吧,方便自己开发。

3、分开SubClass映射:在RC版以前,不管是SubClass还是JoinSubClass,我们都只需要映射在父类中就可以了,但这一做法在RC版中已经不再提倡,我们要分开映射,我相信这个做法是好的,至少能够非常清晰我们自己的映射,不会再像以前看上去不美观了,呵呵。

RC版中,SubClass和JoinSubClass的映射,都要继承SubclassMap<T>,很多属性和方法都跟ClassMap<T>一样,它有自己的一些属性和方法,比如DiscriminatorValue(string value)方法,这个方法很奇妙,如果有这个方法的话,它会映射成SubClass标签,如果没有,则会映射成Join-SubClass标签。

之前:

public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
//Mapping Person Property
DiscriminateSubClassesOnColumn<Man>("Type")
.SubClass<Man>(Person.Man, s =>
{
//Mapping Man Property
}).SubClass<Woman>(Person.Woman, s =>
{
//Mapping Woman Property
});
SetAttribute("discriminator-value", "not null");
}
}

RC版:

public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
//Mapping Person Property
DiscriminateSubClassesOnColumn<Man>("Type", Person.Man)
}
}
public class ManMap : SubclassMap<Man>
{
public ManMap()
{
DiscriminatorValue("0");
//Mapping Man Property
}
}
public class WomanMap : SubclassMap<Woman>
{
public WomanMap()
{
DiscriminatorValue("0");
//Mapping Woman Property
}
}

或许你一开始不太愿意接受这个写法,我一开始就是,但是我后来我慢慢发觉,这样的好处不仅在扩展时,而且在维护、阅读时都比原先的方式要好,你不觉得吗?不过还有不完美的,DiscriminatorValue(string value)这个方法,如果我们的标识符是字符串类型,那还好,但像我这种枚举类型的,不得不硬编码了。

Auto Mapping

1、重命名静态切入点:

AutoPersistenceModel.MapEntitiesFromAssemblyOf<T>

->

AutoMap.AssemblyOf<T>

我感觉重新命名后,更让我理解了,呵呵。因为我没有用过AutoMapping,也只能简单说说了。

2、组件映射:

AutoMap.AssemblyOf<Person>().Where(type => type.Namespace.EndsWith("Domain");

->

.Setup(s => s.IsComponentType = type => type == typeof(Address))

能看懂什么意思,不过没尝试过,不评论,大家有兴趣,可以看详细介绍

3、忽略属性(IgnoreProperty),这个不错,在以前,我们自动映射的时候每个属性不管要不要都映射了,在RC版,我们可以使用如下代码,忽略这些属性不进行映射,非常不错,赞一个。代码:

.ForTypesThatDeriveFrom<Shelf>(map =>
{
map.IgnoreProperty(x => x.YourProperty);
});

还有一些,大家可以看详细介绍

总结

其实还有一些内容,不过我英文不太好,不太懂,大概就是一些如果创建约束,创建规则等等,呵呵,我不太会,等大家帮忙了。

这次RC版本,有很多亮点,不过就是文档不是很全,大家可以去GoogleGroups去求助,也可以自己找一下http://wiki.fluentnhibernate.org ,总体来说,变得越来越人性化了,不过还有很多不足,相信会在下一个版本中解决一些问题的,继续关注中。。。。

时间: 2024-07-30 09:14:47

Fluent NHibernate RC 1.0 --升级内容的相关文章

[Fluent NHibernate]一对多关系处理

目录 写在前面 系列文章 一对多关系 总结 写在前面 上篇文章简单介绍了,Fluent Nhibernate使用代码的方式生成Nhibernate的配置文件,以及如何生成持久化类的映射文件.通过上篇的学习你会发现,Fluent Nhibernate仍然需要引用Nhibernate的两个程序集(Nhibernate.dll和Iesi.Collections.dll),所以与Nhibernate最大的区别就在生成配置文件的方式上面,这里关于Nhibernate的特性方面就不再多赘述,可以参考Nhib

Fluent NHibernate 之旅 导航篇

ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失为一个经典,对于新手的我们,需要完全掌握还需要很长一段路,对于新手来说,最初的配置是非常头大的一件事情,好在老赵推荐一个开源的框架Fluent NHibernate,有了它,我们可以完全脱离配置文件,不过博客园中介绍F

[原创]Fluent NHibernate之旅(三)-- 继承

经过了"开篇"和"简单映射"两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型.泛型.Lambde表达式等等Vs.Framework等特性简单完成映射工作,同时也能让我们学习NHibernate的映射方式,一举夺得,这么好玩的东东,有理由不继续完成这个系列吗?废话不说,回到正题. 从这一篇开始,我们将使用Fluent NHibernate R

Fluent NHibernate 1.0 Rc发布

经过多个版本的修改,Fluent NHibernate 1.0 RC版本终于发布了. http://www.lostechies.com/blogs/jagregory/archive/2009/08/16/fluent-nhibernate-1-0rc.aspx 虽说是好消息,但是这次改动非常大,很多方法都改名了,很多方法都过期了,配置好像也有点麻烦了,这次我的系列已经写到第三篇了,可能需要修改很多,我会尽量按照RC 版本来的. 最可恨的是,宽带到现在还没有装,家里没有办法上网,写的博客无法传

[Fluent NHibernate]第一个程序

目录 写在前面 Fluent Nhibernate简介 基本配置 总结 写在前面 在耗时两月,NHibernate系列出炉这篇文章中,很多园友说了Fluent Nhibernate的东东,也激起我的兴趣,想对它一探究竟,这里也将Fluent Nhibernate写成一个系列,记录自己的学习过程,关于这东东,也是第一次接触,也只能边摸索,边记录了.如果有描述错误的地方,还望多多包涵. 通过Nhibernate的学习,都觉得Nhibernate的使用映射文件的编写很麻烦,这里通过Fluent Nhi

[原创]Fluent NHibernate之旅二--Entity Mapping

接着上一篇,今天我们说说ORM中的Mapping.如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的配置.今天跟上一篇一样,会使用传统方式和 NHibernate 进行讲解.如果你要亲手试验一下,可以先看一下"Fluent NHibernate之旅一",进行一下数据库和SessionFactory的准备. 本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate的实体映射(Entity Mapping)做的非

百度手机输入法2.0升级交互视觉设计分享

文章描述:让输入飞起来--百度手机输入法2.0升级交互视觉设计分享. 曾经有一个好用的输入法放在我的眼前,可是我没有用,等我被输入搞得焦头烂额的时候才后悔莫及,人世间最痛苦的事莫过于此.你的手机如果还没有装百度手机输入法的话赶紧去装吧!不要再犹豫了! 结合本次升级,我们从交互.视觉设计的层面与大家分享一些我们的设计心得和思路. 交互设计层面: 输入法的交互设计,首先应遵循的理念是:如何让用户更方便和快捷的输入? 要让用户更快捷和方便的输入,我们重点想从三个方面入手去实现这个目标: 1.尊重用户的

阿里HotFix2.0升级详解——技术运营小二畅谈热修复领域那些事

在阿里HotFix2.0升级详解直播中,阿里HotFix核心开发工程师悟二从热修复背景.常见的热修复方案.阿里HotFix历程及2.0的突破与创新三个方面展开了详细的演讲.分享中,他重点介绍了百川Hotfix2.X 类.SO文件.资源文件修复方案以及管理后台服务,并对百川Hotfix 2.X将来需要新增的功能也做了展望. 以下内容根据直播视频和PPT整理而成. 热修复背景 正常Bug修复流畅包括版本上线.用户安装.发现Bug.紧急修复.重新发版.用户安装六步.该流程中存在着明显的不足,首先重新发

如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射.最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表时都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中,我们使用了Fluent NHibernate的Mapping方式代替XML配置.使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fl