NHibernate.Mapping.ByCode.Conformist.ClassMapping和FluentNHibernate.Mapping.ClassMap有什么区别?
我正在学习NHibernate,我学到的类映射是用XML完成的。 据我所知,Fluent NHibernate是XML格式映射的强类型替代品。 实际上,这里是fluent-nhibernate
标签描述:
Fluent NHibernate允许您在强类型C#代码中编写NHibernate映射。 这允许轻松重构,提高可读性和更简洁的代码。
后来我使用NHibernate Mapping Generator从我现有的数据库创建映射和域类,它生成了这样的映射代码:
using NHibernate.Mapping.ByCode.Conformist; using NHibernate.Mapping.ByCode; namespace MyNamespace.Infrastructure.Mappings { public class MyItemMapping : ClassMapping { public MyItemMapping() { Table("MyItems"); Schema("master"); Lazy(true); Id(x => x.ID, map => map.Generator(Generators.Assigned)); Property(x => x.Status, map => map.NotNullable(true)); Property(x => x.DueDate, map => map.NotNullable(true)); Property(x => x.NextReminderDate); Property(x => x.DatePaid); Property(x => x.Notes); } } }
瞧,它使用的是NHibernate.Mapping.ByCode.Conformist.ClassMapping
类。 是什么赋予了? 如果NHibernate 确实拥有它自己的强类型,非XML映射function,那么为什么我需要Fluent NHibernate呢?
我注意到NHibernate.Mapping.ByCode.Conformist.ClassMapping
和FluentNHibernate.Mapping.ClassMap
之间存在一些差异。 例如,前者不支持References
,例如References(x => x.BillingItemID);
,通过外键关联实体。 也许还有另一种方法。
FluentNHibernate在NHibernate拥有MappingByCode之前就已存在,现在已经过时了,FluentNHibernate已经过时,它的效率也低于Nhibernate自己的MappingByCode,因为它在启动时生成普通的XML映射文件并在内部使用它们。
NHibernate MappingByCode唯一的缺点是没有太多的文档,我发现最好的是:
http://notherdev.blogspot.co.uk/2012/02/nhibernates-mapping-by-code-summary.html
但无论如何我都会使用NHibernate的版本。 我的印象是NHibernate的版本实际上支持的不仅仅是FluentNhibernate所做的,相当于那个Reference
只是一个关系的对立面,例如,如果父对象被映射为OneToMany()
那么等效的子边图映射到Fluent的Reference
将是ManyToOne()
。 无论如何,我认为就是这样。