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

标签 c# .net nhibernate fluent-nhibernate

我正在学习 NHibernate,我了解到类映射是使用 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从我现有的数据库创建映射和域类,它生成的映射代码如下:

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()。我认为无论如何都是如此。

关于c# - NHibernate.Mapping.ByCode.Conformist.ClassMapping 和 FluentNHibernate.Mapping.ClassMap 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39192527/

相关文章:

c# - 使用 nhibernate 抽象列名

c# - 为什么我的图标没有出现在标题栏中?

c# - 如何将负数变为红色?

.net - Service Stack v4 中的 ServiceStackHttpHandlerFactory 发生了什么?

c# - SharpSvn GetInfo LastChangeRevision 错误

.net - 从强名称文件中提取私钥?

c# - nhibernate joinqueryover 不相关的表(相同的外键)

c# - F# 在管道运算符 aka C# LINQ let 中使用临时变量

c# - 直接从 Dictionary<> 获取 KeyValuePair<>

c# - 你如何在 Nhibernate 中进行版本控制?