НХибернейт 2.0:Проблема Cfg.Configuration.SetProperties с IDictionary
-
20-08-2019 - |
Вопрос
У меня проблема с:
NHibernate.Cfg.Configuration.SetProperties()
Не принимать IDictionary:Нхибернатеконфигхандлер
Я получаю сообщения:
Ошибка 30. Лучшее совпадение перегруженного метода для «NHibernate.Cfg.Configuration.SetProperties(System.Collections.Generic.IDictionary)» имеет несколько недопустимых аргументов.
и
Ошибка 31. Аргумент «1»:невозможно преобразовать из «System.Collections.IDictionary» в «System.Collections.Generic.IDictionary»
Пожалуйста, порекомендуйте?
Весь метод:
/// <param name="config">NHibernate configuration</param>
public ISessionFactory GetSessionFactoryFor(NHibernateConfigHandler config)
{
if (config == null)
throw new ArgumentNullException("config may not be null nor empty");
ISessionFactory sessionFactory = GetSessionFactoryFor(config.MappingAssembly);
// Failed to find a cached SessionFactory so make a new one.
if (sessionFactory == null)
{
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.SetProperties(config.Properties); //THIS LINE
cfg.AddAssembly(config.MappingAssembly);
// Now that we have our Configuration object, create a new SessionFactory
sessionFactory = cfg.BuildSessionFactory();
if (sessionFactory == null)
{
throw new InvalidOperationException("cfg.BuildSessionFactory() returned null.");
}
HttpRuntime.Cache.Add(config.MappingAssembly, sessionFactory, null, DateTime.Now.AddDays(7),
TimeSpan.Zero, CacheItemPriority.High, null);
}
return sessionFactory;
}
Решение
Подпись SetProperties
public NHibernate.Cfg.Configuration SetProperties(System.Collections.Generic.IDictionary<string,string> newProperties)
Member of NHibernate.Cfg.Configuration
Setproperties принимает параметр типа IDictionary, то есть универсальный словарь.А вы пытаетесь перейти в IDictionary.Вот и причина ошибки.
Либо вы можете изменить тип свойств в NHibernateConfigHandler на System.Collections.Generic.IDictionary.Или создать System.collections.generic.idectionary и копировать все значения из system.collections.idictionary.
Всегда эффективнее использовать общий словарь (который находится в System.Collections.Generic), а не IDictionary (который находится в System.Collections).