找不到 System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer
Posted
技术标签:
【中文标题】找不到 System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer【英文标题】:Can't find System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer 【发布时间】:2013-01-19 15:35:39 【问题描述】:我正在从 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版本的bug?
【问题讨论】:
你跑得怎么样?如果您正在部署,那么 EntityFramework.SqlServer.dll 可能会被跳过,因为实际上没有任何东西对它有硬依赖。如果是这种情况,请file a bug。 【参考方案1】:您所做的会创建对 EntityFramework.SqlServer.dll 的引用。它确保使用您的数据访问程序集将此程序集复制到项目的 bin 文件夹中。
您可以通过在数据访问程序集中的某处添加类似以下内容来执行相同操作:
Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices)
【讨论】:
丑陋的黑客......但它立即解决了我的问题。来吧微软!?【参考方案2】:我希望我不会迟到。我正在使用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>
我希望这会有所帮助。
【讨论】:
你的连接字符串是什么样的?即使在应用您的 web.config 设置后,我仍然遇到同样的问题。我的连接字符串如下: 现在我收到此错误:--------------- 一个错误已经发生了。没有为“System.Data.SqlServerCe.4.0”ADO.NET 提供程序找到实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。 这不是为什么需要此参考或是否是错误的答案。所描述的解决方法很明显,因此没有用处。 不,这对我不起作用,你应该去找其他答案。【参考方案3】:问题在于“EntityFramework.SqlServer”引用。
在我的项目中,当我在数据访问层中使用 NuGet 添加 Entity Framework 6.0.1 时,我在客户端遇到了同样的错误,因为客户端没有该引用。
所以,我也通过将该引用添加到客户端解决了这个问题。
【讨论】:
一位智者曾经告诉我“知道为什么要把鸡蛋放在蛋糕里”... Hack 在调试模式下工作正常,但如果在 Release 中编译,编译器将删除无用(未引用)行,随后项目的输出中仍会缺少 EntityFramework.SqlServer.dll。同意,真正的答案是确保 dll 到达需要的位置。【参考方案4】:我在同一个解决方案中使用 EF 4 和 EF 6 两个不同的项目。
在对 EF 6.0 使用 NuGet 后,我的测试项目中删除了对 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" /> ...
【讨论】:
【参考方案5】:@乐龙37
我遇到了与您完全相同的错误:“...没有为 'System.Data.SqlServerCe.4.0' ADO.NET 提供程序找到实体框架提供程序...”
我通过添加对 目录“packages\EntityFramework.SqlServerCompact.6.0.0-rc1\lib\net40”中的“EntityFramework.SqlServerCompact”
希望对你有帮助
【讨论】:
【参考方案6】:我在Youtube 添加了一个截屏视频,在大约 6 分钟内描述了这一点和解决方案。我这样做是因为当您使用遇到相同问题的 Team Build 时,Fabrice 提供的解决方案不起作用。
【讨论】:
【参考方案7】:如果您在使用模板中的全新 MVC 站点时遇到问题: 1) 卸载 Microsoft.ASPNet.Identity.EntityFramework (它会询问您是否要卸载 Entity Framework - 继续执行此操作。) 2) 安装实体框架 3) 重新安装 Microsoft.ASPNET.Identity.EntityFramework
现在应该可以工作了。
【讨论】:
【参考方案8】:我通过复制这两个文件解决了这个问题
EntityFramework.SqlServer.dll
EntityFramework.SqlServer.xml
到/bin
。
【讨论】:
以上是关于找不到 System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer的主要内容,如果未能解决你的问题,请参考以下文章