Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't find System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer

Tags:

I'm constructing a DbContext from an SqlConnection. When I use it, I receive the following error:

The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.

I'm using 6.0.0-alpha2-11210.

I found that weird since I have a reference toward Entity.SqlServer and that I managed to 'fix it' by putting the following line of code before a query:

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

Is it a bug of the alpha version?

like image 271
Vincent-Philippe Lauzon Avatar asked Feb 04 '13 20:02

Vincent-Philippe Lauzon


2 Answers

What you did creates a reference to EntityFramework.SqlServer.dll. It ensures that this assembly gets copied over to the bin folder of projects using you data access assembly.

You can do the same by adding something like the following somewhere in your data access assembly:

Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices) 
like image 171
Fabrice Avatar answered Oct 12 '22 23:10

Fabrice


I hope I am not late. I am using ASP.NET MVC 4 and Entity Framework 6 alpha 3 and ran into a similar problem.

I have multiple projects in my solution. The 2 main projects are:

MyProject.Infrastructure.EntityFramework MyProject.Web 

In the first project I would set up all my repositories, DbContext, etc etc. In this project I have 2 references:

EntityFramework EntityFramework.SqlServer 

The second project is my website. It uses the repositories in the first project to return my data. For example:

private readonly IMyRepository myRepository;  public MyController(IMyRepository myRepository) {      this.myRepository = myRepository; }  public ActionResult Details(int id) {      MyObject myObject = myRepository.FindById(id);       return View(); } 

This is where I had my issues, calling FindById.

All that I did was to add the following reference to my website:

EntityFramework.SqlServer 

In my web.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> 

And beneath the closing system.webServer tag:

<entityFramework>      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">           <parameters>                <parameter value="v11.0" />           </parameters>      </defaultConnectionFactory> </entityFramework> 

I hope this will help.

like image 23
Brendan Vogt Avatar answered Oct 13 '22 00:10

Brendan Vogt