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

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


当前回答

正如消息显示,我们需要添加提供商System.Data.SqlClient,这就是为什么我们需要安装EntityFramework的nuget包,它有两个dll,但如果我们只开发控制台应用程序,那么我们只需要添加EntityFramework. sqlserver .dll的引用

其他回答

我今天才遇到这个问题。我有数据存储库类库与EF63 NuGet包和控制台应用程序进行测试,其中只引用类库项目。我创建了一个非常简单的构建后命令,它将EntityFramework.SqlServer.dll从类库的Bin\Debug文件夹复制到控制台应用程序的Bin\Debug文件夹,问题就解决了。不要忘记将entityFramework部分添加到控制台应用程序的.config文件中。

添加这个函数

private void FixEfProviderServicesProblem()

到库类中的数据库上下文类,丢失的DLL EntityFramework.SqlServer.dll将被复制到正确的位置。

namespace a.b.c
{
    using System.Data.Entity;

    public partial class WorkflowDBContext : DbContext
    {
        public WorkflowDBContext()
            : base("name=WorkflowDBConnStr")
        {
        }

        public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
        public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
        public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
        public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
        public virtual DbSet<TaskItem> TaskItems { get; set; }
        public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }

        private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider assembly is available to the running application. 
            // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
    }
}

.

注意:我在从模型生成数据库Sql时遇到了这个问题。它已经创建了所有的表,但是不能导出更改。您需要注意的是,当您尝试使用DDL生成模板将sql导出为SSDLtoSQL10时,会生成此错误。它期待MySQL连接在这里,所以确保你选择从下拉DDL生成模板SSDLtoMySQL的模型属性。花了一整天的时间!

似乎没有人提到首先检查system . data . sqlclient是否安装在系统中,以及是否引用了它。

我通过安装System.Data.SqlClient并在app.Config中添加一个新的提供者来解决我的问题

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>

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

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

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

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

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

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