在通过nuget下载EF6并尝试运行我的项目后,它返回以下错误:

没有为ADO找到实体框架提供程序。NET提供程序,使用不变名称'System.Data.SqlClient'。确保提供者在应用程序配置文件的“entityFramework”部分中注册。更多信息请参见http://go.microsoft.com/fwlink/?LinkId=260882。


当前回答

你不需要在控制台应用程序中安装实体框架,你只需要添加一个对程序集EntityFramework.SqlServer.dll的引用。您可以将此程序集从使用实体框架的类库项目复制到LIB文件夹,并向其添加引用。

总而言之:

类库应用: 安装实体框架 编写数据层代码 app.config文件包含了除了连接字符串之外与实体框架相关的所有配置。 创建一个控制台,web或桌面应用程序: 向第一个项目添加引用。 添加一个对EntityFramework.SqlServer.dll的引用。 app.config /网络。config有连接字符串(记住,配置项的名称必须与DbContext类的名称相同。

其他回答

今天在处理一组web服务时遇到了这个问题,每个web服务都在不同的项目中,而一个单独的项目包含其中一些服务的集成测试。

我已经在EF5中使用这个设置有一段时间了,不需要包括集成测试项目中对EF的引用。

现在,在升级到EF6之后,似乎我也需要在集成测试项目中包含对EF6的引用,即使它没有在那里使用(正如user3004275上面指出的那样)。

说明你也面临着同样的问题:

直接调用EF(连接到DB,获取数据等)工作正常,只要它们是从引用EF6的项目发起的。 通过已发布的服务接口调用服务工作正常;也就是说,在服务中“内部”不存在缺失引用。 从服务外部的项目直接调用服务项目中的公共方法,将导致此错误,即使EF没有在该项目中使用;仅在被调用的项目内部

第三点是让我困惑了一段时间,我仍然不确定为什么需要这个。在我的集成测试项目中添加ref到EF6,在任何情况下都解决了这个问题…

这些对我都没用。我确实在另一个stackoverflow问题中找到了解决方案。我将在这里添加它以方便参考:

你需要做一份参考资料,所以它会在申请中被复制 路径。因为稍后它将在运行时被引用。所以你不需要 需要复制任何文件。

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}

删除bin文件夹帮我解决了这个问题

我也有同样的问题(在我的3轮胎水平项目),我通过添加/安装EF到我的主项目来修复它。

而不是添加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/