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

ror*_*.ap 6 .net c# nhibernate fluent-nhibernate

我正在学习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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

瞧,它正在使用一个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);通过外键关联实体.也许还有另一种方法.

sta*_*t54 11

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().无论如何,我认为情况就是如此.

  • 缺乏文档是非常令人沮丧的。我阅读、重读、重读您提供的资源,虽然非常好,但并没有涵盖所有内容。我的 googler 很痛... (2认同)