Выберите между Auto Mapping и Fluent mapping с Fluent NHibernate (S # arp Architecture) - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть приложение, использующее NHibernate Auto Mapping ... Пока все работает нормально ...

Конфигурация 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"));
}

Но мне нужно сопоставить класс с отображением 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 Ответ

4 голосов
/ 14 декабря 2010

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

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