使用Fluent NHibernate(S#arp体系结构)在自动映射和Fluent映射之间进行选择

使用Fluent NHibernate(S#arp体系结构)在自动映射和Fluent映射之间进行选择,nhibernate,fluent-nhibernate,s#arp-architecture,Nhibernate,Fluent Nhibernate,S#arp Architecture,我有一个应用程序使用NHibernate自动映射。。。到目前为止一切正常 My Fluent Global.asax配置: private void InitializeNHibernateSession() { NHibernateSession.Init( webSessionStorage, new string[] { Server.MapPath("~/bin/Proj.Data.dll") }, new AutoPersi

我有一个应用程序使用NHibernate自动映射。。。到目前为止一切正常

My Fluent Global.asax配置:

private void InitializeNHibernateSession()
{
    NHibernateSession.Init(
         webSessionStorage,
         new string[] { Server.MapPath("~/bin/Proj.Data.dll") },
         new AutoPersistenceModelGenerator().Generate(),
         Server.MapPath("~/NHibernate.config"));
}
但是我需要用流畅的映射来映射一个类。。。我创建了这个类:

namespace Proj.Data.NHibernateMaps
{
  public class CategoryMap : IAutoMappingOverride<Category>
  {
    public void Override(AutoMapping<Category> mapping)
    {
        mapping.Id(x => x.Id)
            .GeneratedBy.Identity();

        mapping.Map(x => x.Description);  
        mapping.Map(x => x.UrlName);

        mapping.References(x => x.ParentCategory)
            .Not.LazyLoad();            
    }
  }
}
namespace Proj.Data.NHibernateMaps
{
公共类类别映射:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.Id(x=>x.Id)
.GeneratedBy.Identity();
Map.Map(x=>x.Description);
Map.Map(x=>x.UrlName);
mapping.References(x=>x.ParentCategory)
.Not.LazyLoad();
}
}
}
问题是NHibernate从未使用此映射。。。相反,它使用自动映射生成的类别

如何使用Fluent映射

谢谢


Paul

无论在何处配置AutoPersistenceModel,都需要引用映射覆盖。我发现最简单的方法是将它指向包含映射覆盖的程序集,让它发现所有映射覆盖。通过这种方式,您可以添加新的IAutoMappingOverride实现,它将被自动拾取。您可以使用UseOverridesFromAssemblyOf扩展方法执行此操作

public class AutoPersistenceModelGenerator {
    public AutoPersistenceModel Generate() {
        return AutoMap.AssemblyOf<Category>()
            .UseOverridesFromAssemblyOf<CategoryMap>();
    }
}
公共类自动持久性模型生成器{
公共自动持久性模型生成(){
返回AutoMap.AssemblyOf()
.UseOverridesFromAssemblyOf();
}
}

无论在何处配置AutoPersistenceModel,都需要引用映射覆盖。我发现最简单的方法是将它指向包含映射覆盖的程序集,让它发现所有映射覆盖。通过这种方式,您可以添加新的IAutoMappingOverride实现,它将被自动拾取。您可以使用UseOverridesFromAssemblyOf扩展方法执行此操作

public class AutoPersistenceModelGenerator {
    public AutoPersistenceModel Generate() {
        return AutoMap.AssemblyOf<Category>()
            .UseOverridesFromAssemblyOf<CategoryMap>();
    }
}
公共类自动持久性模型生成器{
公共自动持久性模型生成(){
返回AutoMap.AssemblyOf()
.UseOverridesFromAssemblyOf();
}
}