我正在学习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映射功能,那么为什么我需要Fluent NHibernate?
我注意到NHibernate.Mapping.ByCode.Conformist.ClassMapping<T>
和FluentNHibernate.Mapping.ClassMap<T>
之间存在一些差异。例如,前者不支持References
,例如References(x => x.BillingItemID);
,通过外键关联实体。也许还有另一种方法。
答案 0 :(得分: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支持的更多,相当于OneToMany()
只是一个关系的对立面,例如如果父级被映射为Reference
,那么Fluent ManyToOne()
的等效子级边图将是.scroll_class {
position: fixed;
top: 0;
right: 0;
bottom: 0;
}
。无论如何,我认为情况就是这样。