在通过nuget下载EF6并尝试运行我的项目后,它返回以下错误:
没有为ADO找到实体框架提供程序。NET提供程序,使用不变名称'System.Data.SqlClient'。确保提供者在应用程序配置文件的“entityFramework”部分中注册。更多信息请参见http://go.microsoft.com/fwlink/?LinkId=260882。
在通过nuget下载EF6并尝试运行我的项目后,它返回以下错误:
没有为ADO找到实体框架提供程序。NET提供程序,使用不变名称'System.Data.SqlClient'。确保提供者在应用程序配置文件的“entityFramework”部分中注册。更多信息请参见http://go.microsoft.com/fwlink/?LinkId=260882。
当前回答
而不是添加EntityFramework。您可以确保从模型/实体项目中对它进行静态引用,如下所示
static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
这将使构建过程将程序集与主机项目包括在一起。
更多信息在我的博客上 http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
其他回答
注意:我在从模型生成数据库Sql时遇到了这个问题。它已经创建了所有的表,但是不能导出更改。您需要注意的是,当您尝试使用DDL生成模板将sql导出为SSDLtoSQL10时,会生成此错误。它期待MySQL连接在这里,所以确保你选择从下拉DDL生成模板SSDLtoMySQL的模型属性。花了一整天的时间!
您已经将EF添加到类库项目中。你还需要将它添加到引用它的项目(你的控制台应用程序,网站或任何东西)。
今天在处理一组web服务时遇到了这个问题,每个web服务都在不同的项目中,而一个单独的项目包含其中一些服务的集成测试。
我已经在EF5中使用这个设置有一段时间了,不需要包括集成测试项目中对EF的引用。
现在,在升级到EF6之后,似乎我也需要在集成测试项目中包含对EF6的引用,即使它没有在那里使用(正如user3004275上面指出的那样)。
说明你也面临着同样的问题:
直接调用EF(连接到DB,获取数据等)工作正常,只要它们是从引用EF6的项目发起的。 通过已发布的服务接口调用服务工作正常;也就是说,在服务中“内部”不存在缺失引用。 从服务外部的项目直接调用服务项目中的公共方法,将导致此错误,即使EF没有在该项目中使用;仅在被调用的项目内部
第三点是让我困惑了一段时间,我仍然不确定为什么需要这个。在我的集成测试项目中添加ref到EF6,在任何情况下都解决了这个问题…
当你通过Nuget安装实体框架6时。EntityFramework。SqlServer有时会错过另一个可执行文件。只需将Nuget包添加到该项目。
有时以上对测试项目不起作用
要在测试项目中解决这个问题,只需将这个方法放在测试项目中:
public void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
这个方法从未被调用过,但根据我的观察,编译器将删除所有“不必要的”程序集,而不使用EntityFramework。SqlServer stuff测试失败。
我有同样的错误。奇怪的是,它只发生在我使用dbContext查询我的任何模型或获得它的列表时:
var results = _dbContext.MyModel.ToList();
我们试图重新安装实体框架,正确引用它,但无济于事。
幸运的是,我们尝试检查Nuget的所有解决方案,然后更新所有内容或确保所有内容都是相同的版本,因为我们注意到两个项目在Web项目上有不同的EF版本。这很有效。错误消失了。
以下是关于如何管理所有解决方案的Nuget的截图: