21

我正在从 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版本的错误吗?

4

8 回答 8

38

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

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

Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices)
于 2013-08-29T12:53:28.177 回答
13

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

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

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>

我希望这将有所帮助。

于 2013-03-26T18:06:59.127 回答
10

问题是“EntityFramework.SqlServer”参考。

在我的项目中,当我在数据访问层中使用 NuGet 添加实体框架 6.0.1 时,由于客户端没有该引用,我在客户端遇到了同样的错误。

因此,我也通过将该引用添加到客户端来解决该问题。

于 2013-11-06T13:59:01.917 回答
1

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

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

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

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

 <section name="entityFramework" ...

和不

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> ...
于 2014-01-21T09:05:14.630 回答
0

@乐龙37

我遇到了和你一样的错误:“...没有为 'System.Data.SqlServerCe.4.0' ADO.NET 提供程序找到实体框架提供程序...”

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

希望这可以帮助

于 2013-09-15T07:53:12.073 回答
0

如果您在使用模板中的全新 MVC 站点时遇到问题:1) 卸载 Microsoft.ASPNet.Identity.EntityFramework(它会询问您是否要卸载 Entity Framework - 继续执行此操作。) 2) 安装 Entity Framework 3) 重新安装 Microsoft.ASPNET.Identity.EntityFramework

现在应该可以上班了。

于 2014-12-31T23:58:40.317 回答
0

我在Youtube 上添加了一个截屏视频,在大约 6 分钟内描述了这一点和解决方案。我这样做是因为当您使用遇到相同问题的 Team Build 时,Fabrice 提供的解决方案不起作用。

于 2014-02-08T15:16:30.183 回答
-2

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

EntityFramework.SqlServer.dll
EntityFramework.SqlServer.xml

/bin.

于 2015-09-09T06:50:25.727 回答