使用Fluent NHibernate(S#arp架构)选择自动映射和Fluent映射

时间:2010-12-14 18:15:33

标签: nhibernate fluent-nhibernate s#arp-architecture

我有一个使用NHibernate Auto Mapping的应用程序......到目前为止一切正常......

My Fluent Global.asax config:

private void InitializeNHibernateSession()
{
    NHibernateSession.Init(
         webSessionStorage,
         new string[] { Server.MapPath("~/bin/Proj.Data.dll") },
         new AutoPersistenceModelGenerator().Generate(),
         Server.MapPath("~/NHibernate.config"));
}

但我需要用Fluent映射映射一个类......我创建了类:

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();            
    }
  }
}

问题是这个映射从未被NHibernate使用过...而是使用自动映射生成的类别......

如何使用我的Fluent Mapping?

由于

1 个答案:

答案 0 :(得分:4)

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

public class AutoPersistenceModelGenerator {
    public AutoPersistenceModel Generate() {
        return AutoMap.AssemblyOf<Category>()
            .UseOverridesFromAssemblyOf<CategoryMap>();
    }
}