NHibernate 2.0: проблема Cfg.Configuration.SetProperties с IDictionary - PullRequest
0 голосов
/ 10 мая 2009

У меня проблема с:

NHibernate.Cfg.Configuration.SetProperties()

Не принимает IDictionary: NHibernateConfigHandler

Я получаю сообщения:

Ошибка 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;

}

1 Ответ

1 голос
/ 10 мая 2009

Подпись 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.IDictionary и скопируйте все значения из System.Collections.IDictionary.

Всегда эффективно использовать универсальный словарь (который находится в System.Collections.Generic) над IDictionary (который находится в System.Collections).

...