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 ,总体来说,变得越来越人性化了,不过还有很多不足,相信会在下一个版本中解决一些问题的,继续关注中。。。。
- AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统
- 【深度干货】专知主题链路知识推荐#5-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程01
- hihoCoder #1043 : 完全背包(板子题)
- 【深度干货】专知主题链路知识推荐#7-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程02
- hihoCoder #1038 : 01背包(板子题)
- 最小二乘法多项式曲线拟合原理与实现
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
- 一文看懂ovirt的supervdsmd服务
- openstack如何扩展API之二:扩展原有核心API
- selenium+python自动化77-autoit文件上传
- selenium+python自动化78-autoit参数化与批量上传
- libvirt-内存分配和内存热插拔
- selenium+python自动化79-文件下载(SendKeys)
- selenium+python自动化80-文件下载(不弹询问框)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法