Search code examples
c#asp.net.netnhibernateconform

"Unable to find the requested .Net Framework Data Provider" after update to NHibernate 3.2


I use NHibernate 3.1 and I updated to version 3.2. Also I use confOrm 1.0.1.5 and I update to 2.0.0.0vVersion. My version of Firebird NET Provider is 2.7. I do some modifications of my code because confOrm doesn't contain ConfOrm.Mapper anymore. When I try to do a select it returns the following error:

NHibernate.HibernateException : Could not create the driver from NHibernate.Driver.FirebirdClientDriver, NHibernate, Version=3.2.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
  ----> System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
  ----> System.ArgumentException : Unable to find the requested .Net Framework Data Provider.  It may not be installed.
at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
at NHibernate.Cfg.Configuration.BuildSettings()
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at SoftManager.Dao.Util.SessionManager.get_factory() in SessionManager.cs: line 15
at SoftManager.Dao.Util.SessionManager.getSession() in SessionManager.cs: line 23
at SoftManager.Dao.GenericDao`1.findUniqueByWhere(Restricao rest, Order order) in GenericDao.cs: line 144
at SoftManager.Dao.CidadeDao.findUniqueByWhere(Restricao rest, Order order) in CidadeDao.cs: line 52
at SoftManager.Teste.TesteConsulta.consultaCidade2() in TesteConsulta.cs: line 52
at SoftManager.Teste.TesteConsulta.testes() in TesteConsulta.cs: line 17
--TargetInvocationException
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, ref Boolean canBeCached, ref RuntimeMethodHandleInternal ctor, ref Boolean bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)
at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
--ArgumentException
at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName, String driverAssemblyName, String connectionTypeName, String commandTypeName)
at NHibernate.Driver.FirebirdClientDriver..ctor()

Any help is appreciated, thanks!


Solution

  • I googled your error and came to this thread on Social MSDN. To summarize the solution (scroll down for Barrett's solution), it's likely that something is amiss in your machine.config files. This user reported an extra closing tag in his machine.config, as like so:

    <!-- notice the double closing tag -->
    <system.data>
        <DbProviderFactories>
            <add name="Odbc Data Provider" invariant="System.Data.Odbc" ... />
            <add name="OleDb Data Provider" invariant="System.Data.OleDb" ... />
            <add name="OracleClient Data Provider" invariant="System.Data ... />
            <add name="SqlClient Data Provider" invariant="System.Data ... />
            <add name="IBM DB2 for i .NET Provider" invariant="IBM.Data ... />
            <add name="Microsoft SQL Server Compact Data Provider" ... /></DbProviderFactories>
        <DbProviderFactories/>
    </system.data>
    

    Btw, I googled for Unable to find the requested .Net Framework Data Provider. It may not be installed., which is the more interesting part of the reported error. There are more interesting finds, if the above doesn't help.


    A little bit further research brought me to this blog post, which explains why this can be a problem in situation where you have multiple dataproviders, and how to solve it. Note: this StackOverflow question is related, as is this one (solution also in machine.config).