2010-12-14 2 views
0

У меня есть приложение, использующее NHibernate Auto Mapping ... Все работает отлично до сих пор ...Выбор между автоматическим картографированием и Fluent отображением с Fluent NHibernate (S # агр архитектура)

Моего свободного Global.asax конфигурация:

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 ... Вместо этого он использует т он Auto Mapping generated Категория ...

Как я могу использовать свое свободное владение?

Благодаря

Пол

ответ

4

Где бы вы настройки AutoPersistenceModel вы должны ссылаться на картографические переопределение. Я считаю, что самый простой способ сделать это - просто указать его на сборку, содержащую переопределения отображения, и позволить ей обнаружить все из них. Таким образом, вы можете добавить новые реализации IAutoMappingOverride, и они будут автоматически подобраны. Вы делаете это с использованием метода расширения UseOverridesFromAssemblyOf.

public class AutoPersistenceModelGenerator { 
    public AutoPersistenceModel Generate() { 
     return AutoMap.AssemblyOf<Category>() 
      .UseOverridesFromAssemblyOf<CategoryMap>(); 
    } 
} 
Смежные вопросы