NHibernate.Mapping.ByCode.Conformist.ClassMapping和FluentNHibernate.Mapping.ClassMap有什么区别?

6
我正在学习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<MyItem> 
    {
        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<T>类。这是怎么回事?如果NHibernate确实有自己的强类型、非XML映射功能,那我为什么需要Fluent NHibernate呢?
我注意到NHibernate.Mapping.ByCode.Conformist.ClassMapping<T>FluentNHibernate.Mapping.ClassMap<T>之间存在一些差异。例如,前者不支持References,比如References(x => x.BillingItemID);,以通过外键关联实体。也许有其他方法可以做到这一点。
1个回答

14

FluentNHibernate在NHibernate拥有MappingByCode之前就已存在,现在它已经过时,而且比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()。 我想这是这种情况。


2
缺乏文档真是令人沮丧。我反复阅读了你提供的源代码,虽然非常好,但却并没有涵盖所有内容。我的谷歌大神都被我搜痛了... - rory.ap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接