Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 995
Dewey Avatar asked Jan 17 '14 00:01

Dewey


1 Answers

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); } 
like image 52
hdev Avatar answered Sep 20 '22 19:09

hdev