Fluent NHibernate RC 1.0 --升级内容

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

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 ,总体来说,变得越来越人性化了,不过还有很多不足,相信会在下一个版本中解决一些问题的,继续关注中。。。。

相关文章
|
5月前
|
Java Docker 容器
pandora boot热点应用探索问题之修改dockerfile以使用SYNC语法的问题如何解决
pandora boot热点应用探索问题之修改dockerfile以使用SYNC语法的问题如何解决
|
7月前
|
SQL API 数据库
【Entity Framework】EF配置之代码配置详解
【Entity Framework】EF配置之代码配置详解
62 0
|
8月前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
1305 3
|
8月前
|
XML SQL Java
springboot 项目启动报Has been loaded by XML or SqlProvider, ignoring the injection of the SQL的错误的解决方案
springboot 项目启动报Has been loaded by XML or SqlProvider, ignoring the injection of the SQL的错误的解决方案
920 0
|
机器人 测试技术 数据库
RobotFramework 官方demo Quick Start Guide rst配置文件分析
RobotFramework 官方demo Quick Start Guide rst配置文件分析
151 0
|
消息中间件 Kubernetes Go
k8s与日志--采用golang实 现Fluent Bit的output插件
s" "time" "unsafe" "github.com/Shopify/sarama" "github.com/fluent/fluent-bit-go/output" "github.com/ugorji/go/codec" ) var ( brokers []string producer sarama.
2384 0
|
XML Java 网络安全
SSH整合方案二(不带hibernate.cfg.xml)
整体结构: 1.引入相关jar包 2.编写实体类和映射文件 package cn.zqr.domain; public class Customer { private Long cust_id; private String cust_name; priv...
975 0
|
Web App开发 前端开发 安全