NHibernate.Mapping.ByCode.Conformist.ClassMapping和FluentNHib
本文关键字:FluentNHib ClassMapping Conformist Mapping ByCode NHibernate | 更新日期: 2023-09-27 18:04:18
我正在学习NHibernate,其中的类映射,我知道,是用XML完成的。我知道Fluent NHibernate是作为xml风格的映射的强类型替代品而出现的。事实上,以下是fluent-nhibernate
标签的描述:
Fluent NHibernate允许你用强类型编写NHibernate映射c#代码。这允许容易的重构,提高可读性和更简洁的代码。
后来我使用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映射能力,那么我为什么需要流利的NHibernate?
我注意到NHibernate.Mapping.ByCode.Conformist.ClassMapping<T>
和FluentNHibernate.Mapping.ClassMap<T>
之间存在一些差异。例如,前者不支持References
(例如References(x => x.BillingItemID);
)通过外键来关联实体。也许还有别的方法
在NHibernate有MappingByCode之前,FluentNHibernate就存在了,现在它有了,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()
。