No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'.

75,456

Solution 1

You need to create a reference, so it will be copied in the debug folder. So later it can accessed in runtime.

Don't to copy any files, just create this reference:

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

Solution 2

do you have the assembly EntityFramework.SqlServer.dll in your application path? I had the same Problem and after copying the dll into the application path every Thing worked fine.

Solution 3

Finally found the answer in this blog:

http://robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html

Solution 4

I had this problem too. Everything worked locally when I ran my .net mvc app but when I published it I got this error. The problem was that I had to reference the EntityFrameworl.SqlServer also in my web project alhough I had seperate project for Data. What is strange is that this error was only thrown when app was published. This is some serious bug probably from Microsoft. I used EF 6.1.1.

Solution 5

This is because EntityFramework.SqlServer.dllis not copied into your project. Add that dll and it will hopefully work.You can find that from the project where you added datamodel.

Share:
75,456
Dewey
Author by

Dewey

Updated on August 16, 2020

Comments

  • Dewey
    Dewey over 3 years

    We are using EntityFramework 6 with Code First. We have a console app that has no reference to EntityFramework but reads the connection string from its App.config. It calls the DatabaseInitializationUtilities assembly passing the connection string as a parameter.

    DatabaseInitializationUtilities has the reference to EF6 (EntityFramework and EntityFramework.SqlServer). Its App.config is this:

    <?xml version="1.0" encoding="utf-8"?>
      <configuration>
         <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>
         <system.serviceModel>
             <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IAuthentication" />
                </basicHttpBinding>
             </bindings>
             <client>
                <endpoint address="http://localhost/SecurityServices/Authentication.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAuthentication" contract="SecurityService.IAuthentication" name="BasicHttpBinding_IAuthentication" />
             </client>
          </system.serviceModel>
          <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>
       </configuration>
    

    When execution reaches a line where DatabaseInitializationUtilities attempts to run a script

    context.Database.ExecuteSqlCommand(script.ScriptText)
    

    the error is thrown:

    No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

    I believe the remedy is exactly what I have in my config file, so I don't understand the problem.

    NOTE: Resharper is bluelining the node and reporting "The element 'EntityFramework' has an invalid child element 'providers'. However, the section was injected by NuGet when I installed EF6.

    Any ideas?

  • satnhak
    satnhak about 10 years
    Epic win! The reason it fails is that only assemblies that are used directly get copied. This assembly has no direct reference so does not get copied.
  • Channa
    Channa almost 10 years
    i ran into the same problem and fixed by adding the EntityFramework.SqlServer.dll which was missing
  • ProfK
    ProfK over 9 years
    I think the EF team have some big explaining up to do on this one.
  • Xan-Kun Clark-Davis
    Xan-Kun Clark-Davis over 8 years
    Yeo, that was the problem for me too... I deleted the whole database and checked out the solution from scratch, and after the first build I got this exact "error massage" :-) Inserted the volatile refrence and it worked.
  • Mike
    Mike about 8 years
    I had this exact same problem. My reference to the ef assemblies is in a seperate data project referenced from my mvc project. I installed ef from nuget to my mvc project, re-published and it worked. Thanks for the fix
  • Deilan
    Deilan about 8 years
    So why not briefly mention the main idea of it here?
  • Michael Freidgeim
    Michael Freidgeim almost 8 years
    @Deilan the idea is the same as in dh_cgn answer stackoverflow.com/a/21531672/52277
  • DJJ
    DJJ over 7 years
    Download the dll and add it manually to your primary app. Make sure 'Copy Local = true' under properties. I would not recommend the solution to the question as the workaround code will be deleted when you update your entity model.
  • AH.
    AH. over 6 years
    That is really interesting. Not sure how that works, but it does work :-)