35

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?

4
  • Take a look at the following question: stackoverflow.com/questions/14033193/… Commented Jan 17, 2014 at 0:35
  • Thank you. The comment to [stackoverflow.com/questions/14033193/… was helpful. [1]: stackoverflow.com/questions/14033193/… Commented Jan 17, 2014 at 16:33
  • 1
    Add EntityFramework.SqlServer.dll to the client app and add connectionstrings to its app.config file did the trick. Now the error is gone stackoverflow.com/questions/18455747/… Commented Aug 15, 2014 at 23:20
  • In our case, the EF assemblies were GACed. In this case, you should use the full assembly name in the config file: <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> Commented Nov 16, 2016 at 11:24

9 Answers 9

53

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); } 
Sign up to request clarification or add additional context in comments.

4 Comments

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.
I think the EF team have some big explaining up to do on this one.
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.
That is really interesting. Not sure how that works, but it does work :-)
17

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.

1 Comment

i ran into the same problem and fixed by adding the EntityFramework.SqlServer.dll which was missing
5

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.

1 Comment

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
4

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.

Comments

2

For me it turned out that my provider reference in the web.config file was incorrect. I believe that the nuget package might not properly include the provider.

I replaced my provider with this and it worked:

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

Comments

2

I also had a similar problem

My problem was solved by doing the following:

  1. Clicking on Tools > NuGet Package Manager > Package Manager Console

    enter image description here

  2. Selecting the project under the "Default project:" dropdown

  3. Typing the command install-package EntityFrameWork and hitting Enter to execute it.

    enter image description here

1 Comment

Image-based answers are neither searchable or accessible to visually impaired users, especially when you don't add any alt text beyond "enter image description here". Images should add to an answer, not comprise the entirety of it.
0

The best way to get ride of such a kind of problem is to include the reference EntityFramework.SqlServer.dll into your project the press F4 (op the properties) change the property to Copy to Local =True so each and every time when publish the app it will be copied to the published folder.

Comments

0

I tend to add EntityFramework to the web project as well as the assembly that actually references it.

Comments

0

Add "EntityFramework.SqlServer.dll" into your project bin folder will resolved your issue.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.