2010-03-13 3 views
3

Может кто-нибудь посоветует мне, как предотвратить эту ошибку. Элемент с тем же ключом уже добавлен.Элемент с тем же ключом уже добавлен

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

Ошибка здесь: SessionFactory = cfg.BuildSessionFactory();

+0

У вас есть источники cfg.BuildSessionFactory()? –

+0

не жаль, что я не его – senzacionale

ответ

2

Попробуйте следующее:

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 за ваш ответ, но теперь я получаю Ссылка на объект не указывает на экземпляр объекта во втором еще заявлении если (перехватчик! = NULL) { сессия = GetSessionFactoryFor (sessionFactoryConfigPath). OpenSession (перехватчик); } else { session = GetSessionFactoryFor (sessionFactoryConfigPath) .OpenSession(); } – senzacionale

+0

Просто восстановите существующий sessionFactory ... см. Редактировать. – AxelEckenberger

+0

i измененный оператор else в else if (sessionFactoryConfigPath! = Null) { sessionFactory = (ISessionFactory) sessionFactories [sessionFactoryConfigPath]; }, но это то же самое. Что делать, если оператор if будет выглядеть как (sessionFactoryConfigPath! = Null &&! SessionFactories.ContainsValue (sessionFactory)) { – senzacionale

0

Является ли это решение в порядке?

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]; 
        } 
Смежные вопросы