2010-12-14 101 views
0

J'ai une application à l'aide NHibernate Mapping automatique ... Tout fonctionne bien jusqu'à présent ...Choisir entre Auto Mapping et cartographie avec Fluent Fluent NHibernate (S # arp Architecture)

Ma config Courant Global.asax:

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

Mais je dois mapper une classe avec la cartographie Fluent ... J'ai créé la classe:

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

le problème est que cette application est jamais utilisé par le NHibernate ... il utilise t au lieu Le mappage automatique a généré la catégorie ...

Comment puis-je utiliser mon mappage de fluides?

Merci

Paul

Répondre

4

Où que vous configurez l'AutoPersistenceModel vous devez référencer les remplacements de cartographie. Je trouve que la façon la plus simple de le faire est de simplement le pointer sur l'assemblage contenant les remplacements de mappage et de le laisser les découvrir tous. De cette façon, vous pouvez ajouter de nouvelles implémentations IAutoMappingOverride et il sera automatiquement ramassé. Pour ce faire, utilisez la méthode d'extension UseOverridesFromAssemblyOf.

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