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