NHibernate.Mapping.ByCode.Conformist.ClassMapping 和 FluentNHibernate.Mapping.ClassMap 有什么区别?
What is the difference between NHibernate.Mapping.ByCode.Conformist.ClassMapping and FluentNHibernate.Mapping.ClassMap?
我正在学习 NHibernate,我了解到 class 映射是使用 XML 完成的。我知道 Fluent NHibernate 是作为 XML 映射风格的强类型替代品出现的。事实上,这里是 fluent-nhibernate
标签描述:
Fluent NHibernate lets you write NHibernate mappings in strongly typed
C# code. This allows for easy refactoring, improved readability and
more concise code.
后来我使用 NHibernate Mapping Generator 从现有数据库创建映射和域 classes,它生成的映射代码如下:
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>
class。是什么赋予了? 如果 NHibernate 实际上 确实 具有自己的强类型、非XML 映射功能,那么我为什么需要 Fluent NHibernate?
我注意到 NHibernate.Mapping.ByCode.Conformist.ClassMapping<T>
和 FluentNHibernate.Mapping.ClassMap<T>
之间存在一些差异。例如,前者不支持 References
,例如References(x => x.BillingItemID);
,通过外键关联实体。也许还有另一种方法。
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()
。反正我觉得是这样。
我正在学习 NHibernate,我了解到 class 映射是使用 XML 完成的。我知道 Fluent NHibernate 是作为 XML 映射风格的强类型替代品出现的。事实上,这里是 fluent-nhibernate
标签描述:
Fluent NHibernate lets you write NHibernate mappings in strongly typed C# code. This allows for easy refactoring, improved readability and more concise code.
后来我使用 NHibernate Mapping Generator 从现有数据库创建映射和域 classes,它生成的映射代码如下:
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>
class。是什么赋予了? 如果 NHibernate 实际上 确实 具有自己的强类型、非XML 映射功能,那么我为什么需要 Fluent NHibernate?
我注意到 NHibernate.Mapping.ByCode.Conformist.ClassMapping<T>
和 FluentNHibernate.Mapping.ClassMap<T>
之间存在一些差异。例如,前者不支持 References
,例如References(x => x.BillingItemID);
,通过外键关联实体。也许还有另一种方法。
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()
。反正我觉得是这样。