2010-07-30 3 views
2

Quelle est la meilleure approche pour tester plusieurs db dans un projet s # arparch?Test de plusieurs mappages db dans MappingIntegrationTests

Le code SetUp() en cours dans MappingIntegrationTests tente de tester chaque assembly par rapport à la première base de données.

chaîne [] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies();

configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, 
            new AutoPersistenceModelGenerator().Generate(), 
            "../../../../app/Humanities.IBusiness.Web/NHibernate.config"); 

Est-ce que quelqu'un a réussi à tester correctement chaque mappage par rapport au schéma de base de données approprié?

Répondre

1

Al, pour être honnête Je ne sais pas dans quelle mesure les utilisateurs utilisent plusieurs bases de données. C'est quelque chose que je crois que quelques personnes très vocales ont fait pression au début du cycle de vie des projets. C'est quelque chose que j'allais demander à la communauté, il semble que le moment soit venu de poser la question.

Ce que vous devrez peut-être faire est de déplacer le code de configuration dans des méthodes individuelles. Bien que je ne sois pas fou de casser le principal DRY, il semblerait que dans ce cas-ci il soit requis.

Alec

+0

Eh bien, je peux vous répondre que je l'utilise et vraiment besoin de bases de données multiples dans 2 projets :) Lorsqu'un utilisateur crée un nouveau compte, nous créons sur les serveurs de production et de test –

+0

Rafael, bien que les réponses que l'on. Frappez-moi par email quand vous avez une chance. Aimeriez-vous choisir votre cerveau sur plusieurs bases de données en général. Alec – Alec

+0

J'utilise aussi plusieurs bases de données dans tous mes grands projets (4+), pour ce que ça vaut. –

3

Hey Alec, merci pour la réponse. J'ai piraté un peu d'une solution - il aint joli mais il ne test de fumée cartographies louches à travers de multiples db de

Dans la mise en place ajouter les éléments suivants:

private List<string> sessionKeys; 
     [SetUp] 
     public virtual void SetUp() 
     { 
      string[] mappingAssemblies = RepositoryTestsHelper.GetMappingAssemblies(); 
      configuration = NHibernateSession.Init(new SimpleSessionStorage(), mappingAssemblies, 
            new AutoPersistenceModelGenerator().Generate(), 
            "../../../../app/Humanities.IBusiness.Web/NHibernate.config"); 

      /*NEW CODE */ 
      var configuration2 = NHibernateSession.AddConfiguration(DataGlobals.ROLES_DB_FACTORY_KEY, 
       mappingAssemblies, 
       new AutoPersistenceModelGenerator().Generate(), 
       "../../../../app/Humanities.IBusiness.Web/NHibernateForRolesDb.config",null,null, null); 
      sessionKeys = new List<string>(); 
      sessionKeys.Add(DataGlobals.DEFAULT_DB_KEY); 
      sessionKeys.Add(DataGlobals.ROLES_DB_FACTORY_KEY); 

Puis, dans les CanConfirmDatabaseMatchesMappings

foreach (var entry in allClassMetadata) 
       { 
        bool found = false; 
        foreach (string key in sessionKeys) 
        { 
         ISession session = NHibernateSession.CurrentFor(key); 
         try 
         { 
          session.CreateCriteria(entry.Value.GetMappedClass(EntityMode.Poco)) 
           .SetMaxResults(0).List(); 
          found = true; 
         } 
         catch (Exception ex) { } 

        } 
        if (found == false) 
         throw new MappingException("Mapping not found for " + entry.Key.ToString()); 
       } 

Je ne sais pas si elle est une réponse complète, mais mieux que rien :)

Toute pensée?

+0

Al, Je ne vois pas de problème avec cette solution. Tandis que, comme vous l'avez souligné, les grandes questions ne sont pas élégantes, est-ce que cela correspond à vos besoins? Je pense que la réponse est un oui retentissant! Pourriez-vous poster votre solution sur le groupe S # google pour montrer aux autres? Peut-être même envie de faire une page wiki pour cela. Au minimum, il en montrera d'autres et encouragera une discussion sur le sujet. Alec – Alec

+0

Fait l'Al. Merci – ActualAl

Questions connexes