2010-03-13 6 views
3

Quelqu'un peut-il me conseiller comment éviter cette erreur? Un article avec la même clé a déjà été ajouté.Un article avec la même clé a déjà été ajouté

// Failed to find a matching SessionFactory so make a new one. 
     if (sessionFactory == null) 
     { 
      Check.Require(File.Exists(sessionFactoryConfigPath), 
          "The config file at '" + sessionFactoryConfigPath + "' could not be found"); 

      Configuration cfg = new Configuration(); 
      cfg.Configure(sessionFactoryConfigPath); 

      /*MINE*/ 
      var persistenceModel = new PersistenceModel(); 
      persistenceModel.AddMappingsFromAssembly(Assembly.Load("EMedicine.Core")); 
      persistenceModel.Configure(cfg); 
      /*END_OF_MINE*/ 

      // Now that we have our Configuration object, create a new SessionFactory 
      sessionFactory = cfg.BuildSessionFactory(); 

      if (sessionFactory == null) 
      { 
       throw new InvalidOperationException("cfg.BuildSessionFactory() returned null."); 
      } 

      if (sessionFactoryConfigPath != null) sessionFactories.Add(sessionFactoryConfigPath, sessionFactory); 
     } 

erreur est ici: sessionFactory = cfg.buildSessionFactory();

+0

Avez-vous des sources de la méthode cfg.BuildSessionFactory()? –

+0

pas désolé, je ne l'ai pas – senzacionale

Répondre

2

les opérations suivantes:

if (
    sessionFactoryConfigPath != null && 
    sessionFactories.ContainsKey(sessionFactoryConfigPath) 
) { 
    sessionFactory = cfg.BuildSessionFactory(); 

    if (sessionFactory == null) 
    { 
     throw new InvalidOperationException("cfg.BuildSessionFactory() returned null."); 
    } 

    sessionFactories.Add(sessionFactoryConfigPath, sessionFactory); 
} else (sessionFactoryConfigPath != null) { 
    sessionFactory = sessionFactories[sessionFactoryConfigPath]; 
} 
+0

Thx pour votre réponse, mais maintenant je reçois référence d'objet non définie à une instance d'un objet dans la deuxième instruction else if (intercepteur! = Null) { session = GetSessionFactoryFor (sessionFactoryConfigPath). OpenSession (intercepteur); } sinon { session = GetSessionFactoryFor (sessionFactoryConfigPath) .OpenSession(); } – senzacionale

+0

Récupérez simplement la sessionFactory existante ... voir Modifier. – AxelEckenberger

+0

J'ai modifié l'instruction else à else if (sessionFactoryConfigPath! = Null) { sessionFactory = (ISessionFactory) sessionFactories [sessionFactoryConfigPath]; } mais c'est pareil. Que faire si if instruction sera comme si (sessionFactoryConfigPath! = Null &&! SessionFactories.ContainsValue (sessionFactory)) { – senzacionale

0

Cette solution est OK?

try 
        { 
         // Now that we have our Configuration object, create a new SessionFactory 
         sessionFactory = cfg.BuildSessionFactory(); 

         if (sessionFactory == null) 
         { 
          throw new InvalidOperationException("cfg.BuildSessionFactory() returned null."); 
         } 

         if (sessionFactoryConfigPath != null) 
          sessionFactories.Add(sessionFactoryConfigPath, sessionFactory); 
        } 
        catch (Exception) 
        { 
         if (sessionFactoryConfigPath != null) 
          sessionFactory = (ISessionFactory) sessionFactories[sessionFactoryConfigPath]; 
        } 
Questions connexes