找不到System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer

时间:2013-02-04 20:36:29

标签: c# entity-framework-6

我正在从SqlConnection构造一个DbContext。当我使用它时,我收到以下错误:

  

“System.Data.SqlClient”ADO.NET提供程序的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”无法加载。

我正在使用6.0.0-alpha2-11210。

我发现这很奇怪,因为我有一个对Entity.SqlServer的引用,并且我设法通过在查询之前放置以下代码行来“修复它”:

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

这是alpha版本的错误吗?

8 个答案:

答案 0 :(得分:38)

您所做的是创建对EntityFramework.SqlServer.dll的引用。它确保使用您的数据访问程序集将此程序集复制到项目的bin文件夹中。

您可以通过在数据访问程序集中的某处添加以下内容来执行相同的操作:

Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices)

答案 1 :(得分:13)

我希望我不迟到。我正在使用ASP.NET MVC 4和Entity Framework 6 alpha 3并遇到了类似的问题。

我的解决方案中有多个项目。这两个主要项目是:

MyProject.Infrastructure.EntityFramework
MyProject.Web

在第一个项目中,我将设置所有存储库,DbContext等。在这个项目中,我有2个引用:

EntityFramework
EntityFramework.SqlServer

第二个项目是我的网站。它使用第一个项目中的存储库来返回我的数据。例如:

private readonly IMyRepository myRepository;

public MyController(IMyRepository myRepository)
{
     this.myRepository = myRepository;
}

public ActionResult Details(int id)
{
     MyObject myObject = myRepository.FindById(id);

     return View();
}

这是我遇到问题的地方,请致电FindById

我所做的只是将以下参考添加到我的网站:

EntityFramework.SqlServer

在我的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>

在结束system.webServer标记下方:

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

我希望这会有所帮助。

答案 2 :(得分:10)

问题是“EntityFramework.SqlServer”引用。

在我的项目中,当我在数据访问层中使用NuGet添加Entity Framework 6.0.1时,我在客户端获得了相同的错误,因为客户端没有该引用。

所以,我通过将该引用添加到客户端来解决了这个问题。

答案 3 :(得分:1)

我在同一解决方案中使用EF 4和EF 6两个不同的项目。

使用NuGet for EF 6.0后,在我的测试项目中删除了对EF 4的所有引用。我不得不再次从项目中删除EF6,并为EF4添加了对System.Data.Entity的引用。

要通过测试项目中的EF6访问数据,我必须手动引用EntityFramework.SqlServer.dll(4.5)并使用hack(上面)建议。

我的测试项目的app.config中无需进行任何更改。

没有

 <section name="entityFramework" ...

且没有

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> ...

答案 4 :(得分:0)

@ LeLong37

我遇到了与您完全相同的错误:“...找不到'System.Data.SqlServerCe.4.0'ADO.NET提供程序的实体框架提供程序......”

我通过添加引用来解决它 目录“packages \ EntityFramework.SqlServerCompact.6.0.0-rc1 \ lib \ net40”中的“EntityFramework.SqlServerCompact”

希望这会有所帮助

答案 5 :(得分:0)

我在Youtube添加了一个截屏视频,在大约6分钟内描述了这个和解决方案。我之所以这样做是因为当您使用Team Build时,Fabrice提供的解决方案无法正常运行。

答案 6 :(得分:0)

如果您从模板中遇到全新MVC网站的问题: 1)卸载Microsoft.ASPNet.Identity.EntityFramework(它将询问您是否要卸载实体框架 - 继续执行此操作。) 2)安装实体框架 3)重新安装Microsoft.ASPNET.Identity.EntityFramework

现在应该正常工作。

答案 7 :(得分:-1)

我通过复制两个文件来解决问题

EntityFramework.SqlServer.dll
EntityFramework.SqlServer.xml

/bin