2009-01-12 9 views

Répondre

2

# # # # # # # # # #

MISE À JOUR:
Cette réponse a été écrit en février 2009. Avec le taux que le projet était FluentNHibernate En changeant, il est très probable que la méthode a été renommée ou que le mécanisme de modification des conventions a été déplacé.

# # # # # # # # # #

Je voulais utiliser DatabaseTextFixtureBase de Rhino.Commons.ForTesting avec FluentNHibernate. Le problème que j'ai rencontré est le fait que FluentNHibernate ajoute de la magie à la configuration de NHibernate dans la classe PersistenceModel, et met la main sur la configuration de NHibernate quand vous appelez DatabaseTestFixtureBase.InitializeNHibernateAndIoC() Rhino.Commons fait beaucoup de choses en privé et vous n'avez plus accès à la config NHibernate. En fin de compte, ma dernière hypothèse était erronée. Si vous enregistrez un service INHibernateInitializationAware avec le conteneur, il sera récupéré par le NHibernateUnitOfWorkTestContext lorsqu'il appelle CreatConfigs().

La mise en œuvre INHibernateInitializationAware que j'utilise ressemble à ceci:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware 
{ 
    public void BeforeInitialization(){} 

    public void Configured(Configuration cfg) 
    { 
     var persistenceModel = new PersistenceModel 
            { 
             Conventions = 
              { 
               GetForeignKeyName = (prop => prop.Name + "Id"), 
               GetForeignKeyNameOfParent = (prop => prop.Name + "Id") 
              } 
            }; 
     persistenceModel.addMappingsFromAssembly(typeof(OneOfMyMappingClasses).Assembly); 
     persistenceModel.Configure(cfg); 

    } 

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){} 
} 

Bien sûr, les conventions peuvent être remplacées par tout ce que vous arrive d'utiliser.

Profitez-en!


Si vous utilisez la dernière version de FluentNHibernate vous pouvez utiliser la classe Couramment pour configurer vos applications. Voici une autre version du FluentNHibernateInitializationAwareConfigurator:

public class FluentNHibernateInitializationAwareConfigurator : INHibernateInitializationAware 
{ 
    public void BeforeInitialization(){} 

    public void Configured(Configuration cfg) 
    { 
     Fluently.Configure().Mappings(m => 
     { 
      m.FluentMappings.AddFromAssemblyOf<User>() 
       .AlterConventions(convention => 
        { 
         convention.GetForeignKeyName = (prop => prop.Name + "Id"); 
         convention.GetForeignKeyNameOfParent = (prop => prop.Name + "Id"); 
        } 
       ); 
      m.Apply(cfg); 
     }); 
    } 

    public void Initialized(Configuration cfg, ISessionFactory sessionFactory){} 
} 
+0

Merci, Je vais faire un essai et vous faire savoir! – fromano

+0

Salut, J'ai essayé et ça marche super! Merci – fromano