2010-12-14 6 views
0

ich eine Anwendung mit NHibernate Auto Mapping haben ... Alle bisher feine Arbeit ...Wählen Sie zwischen Auto-Mapping und Fluent Mapping mit Fluent NHibernate (S # arp-Architektur)

Meine 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")); 
} 

Aber ich brauche eine Klasse mit Fluent Mapping abzubilden ... habe ich die Klasse:

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

Das Problem ist, dass diese Zuordnung nicht durch die NHibernate verwendet wird ... Stattdessen verwendet es t he Auto Mapping generiert Kategorie ...

Wie kann ich meine Fluent Mapping verwenden?

Dank

Paul

Antwort

4

Überall dort, wo Sie die AutoPersistenceModel gerade konfigurieren, müssen Sie die Zuordnung überschreibt verweisen. Ich finde den einfachsten Weg, dies zu tun, ist es nur auf die Assembly zu zeigen, die die Mapping-Overrides enthält, und sie alle entdecken zu lassen. Auf diese Weise können Sie neue IAutoMappingOverride-Implementierungen hinzufügen, die automatisch übernommen werden. Sie tun dies mit der Erweiterungsmethode UseOverridesFromAssemblyOf.

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