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

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


当前回答

添加这个函数

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;
        }
    }
}

.

其他回答

我得到了同样的错误,而使用实体框架6与SQL Server紧凑4.0。关于EF6实体框架提供者的MSDN的文章很有帮助。在包管理器控制台以nuget包的形式运行相应的提供程序命令可能会解决这个问题,因为nuget包也会自动向配置文件添加注册。我运行PM>安装包实体框架。SqlServerCompact来解决问题。

在Azure上从CE db迁移到Sql Server时,我遇到了一个相关的问题。浪费了4个小时来解决这个问题。希望这能挽救一些有类似命运的人。对我来说,我的包中有一个对SqlCE的引用。配置文件。删除它解决了我的整个问题,并允许我使用迁移。太棒了,微软又推出了一项存在不必要的复杂设置和配置问题的技术。

大家注意,两个dll EntityFramework.dll和EntityFramework.SqlServer.dll是DataAccess层库,在视图或任何其他层中使用它们是不符合逻辑的。它能解决你的问题,但不符合逻辑。

逻辑的方法是删除实体属性并用Fluent API替换它们。这是实解

我抛出了相同的异常。我包括

using System.Data; 
using System.Data.Entity;

一切都恢复正常了。

另外,确保你的启动项目是包含dbcontext(或相关的app.config)的项目。我的是试图启动一个网站项目,没有所有必要的配置设置。