views:

510

answers:

1

Hello

I have a problem with:

NHibernate.Cfg.Configuration.SetProperties()

Not accepting the IDictionary: NHibernateConfigHandler

I get the messages:

Error 30 The best overloaded method match for 'NHibernate.Cfg.Configuration.SetProperties(System.Collections.Generic.IDictionary)' has some invalid arguments

and

Error 31 Argument '1': cannot convert from 'System.Collections.IDictionary' to 'System.Collections.Generic.IDictionary'

Please advise?


The whole Method:

/// <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  A: 

Signature of SetProperties is

public NHibernate.Cfg.Configuration SetProperties(System.Collections.Generic.IDictionary<string,string> newProperties)
    Member of NHibernate.Cfg.Configuration

Setproperties is taking parameter of type IDictionary, i.e Generic Dictionary. And you trying to pass in IDictionary. Thats the reason for error.

Either you can change type of Properties in NHibernateConfigHandler to System.Collections.Generic.IDictionary. OR Create a System.Collections.Generic.IDictionary and copy all values from System.Collections.IDictionary.

It's always efficient to use generic Dictionary(which is on System.Collections.Generic) over IDictionary(which is on System.Collections).

Sathish Naga