MigLuev
MigLuev

Reputation: 201

Entity Framework ADO.NET Sql.Data.Client provider not found

I have a similar problem as the one presented in the question No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient', the error has the following message:

"The ADO.NET provider with invariant name 'System.Data.SqlClient' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details."

As the answers to the related question suggest, I have reinstalled Entity Framework (EF6) via the Package Manager Console, but the error persists. I also checked that EntityFramework.SqlServer.dll is referenced in my project. Here is the connection string as stored in App.config:

<add name="DesignModel"    ConnectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/DesignModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=C071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />     

I have another project where I used EntityFramework to create the exact same entities and context, and it works fine, which makes this all more puzzling.

The error is shown when trying to execute this lines:

DesignModel designContext = new DesignModel();
designContext.MoPerfIDs.Load();

where DesignModel is the name of the class that inherits DbContext.

Here's the full App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
       <section name="ppe.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
      <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>

  <connectionStrings>
    <add name="DesignModel" connectionString="metadata=res://*/DesignModel.csdl|res://*/DesignModel.ssdl|res://*/Design    Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MONNMC071E;initial catalog=CTD2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="System.Data.SqlClient" />
        </parameters>
    </defaultConnectionFactory>
    <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
</entityFramework>
</configuration>

Any help will be appreciated. Thanks in advance.

Upvotes: 19

Views: 54624

Answers (9)

H. Aydin
H. Aydin

Reputation: 370

If you get this error on Visual Studio while debugging, this happens after you installed another DB provider or IDE with DB Provider. I faced this error after I installed Delphi on my computer.

Solution: Just edit C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config and remove tags.

Upvotes: -1

Ogglas
Ogglas

Reputation: 70126

I got this error but for me it was something entirely different.

I had to edit:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

And:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

Searching for DbProviderFactories both configs looked like this:

<system.data>
    <DbProviderFactories>
        <add name="IBM DB2 for i .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for IBM i" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
    </DbProviderFactories>
    <DbProviderFactories />
</system.data>

When I removed the trailing <DbProviderFactories /> everything started working again.

I was able to solve it by looking at only Unable to find the requested .Net Framework Data Provider and finding this answer:

https://stackoverflow.com/a/9929534/3850405

Upvotes: 0

Linojan
Linojan

Reputation: 168

Simply install "MySql.Data.Entity" from nuget! It will install mysql ado driver and entity driver automatically!

Upvotes: 1

Blue Clouds
Blue Clouds

Reputation: 8161

The problem in my case was that inorder to catch another exception I had enabled CLR exceptions. And I forgot to disable it.

I disabled it in my exception setting. and it overlooked this exception and went on to run and create a db for me (in my case) automatically.

Upvotes: 0

ND72
ND72

Reputation: 2107

Try adding

var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

in the ctor of your designContext.

Upvotes: 0

Louis Nguyen
Louis Nguyen

Reputation: 139

There are 2 options which you can try.

1) Load "System.Data.SqlClient" manually

Include the follow statement in your context class

var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);

2) Don't load "System.Data.SqlClient"

By change from

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

to

<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

I hope your issue is resolved.

Upvotes: 0

MigLuev
MigLuev

Reputation: 201

Still not sure what was causing the problem, but ended up creating a new solution and copying everything from my project. Now works fine. Really weird, indeed.

Upvotes: 1

Kirill Bestemyanov
Kirill Bestemyanov

Reputation: 11964

You need to register the Entity Framework provider for the System.Data.SqlClient SQL connection type. you should have in app.config:

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

Upvotes: 3

Aron
Aron

Reputation: 15772

Wow...that is pretty special...Anyways. You need to register the Entity Framework provider for the System.Data.SqlClient SQL connection type.

You want to add the following to your app.config/web.config

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlClient" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Upvotes: 0

Related Questions