我正在学习NHibernate,其中类映射是用XML完成的。我了解到,Fluent NHibernate作为强类型替代XML样式映射而出现。实际上,这里是
“Fluent NHibernate允许您使用强类型的C#代码编写NHibernate映射。这样可以轻松进行重构,提高可读性并且代码更加简洁。”
后来,我使用NHibernate Mapping Generator从我的现有数据库创建映射和领域类,并生成了以下映射代码:
看,它正在使用一个
我注意到
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);
,以通过外键关联实体。也许有其他方法可以做到这一点。