Entity framework 使用EF6连接到SQL Server

Entity framework 使用EF6连接到SQL Server,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,在EF5之前,为了连接到SQL Server 2012,我只需要指定一个如下所示的连接字符串: Data Source=.\SqlExpress;Initial Catalog=MyDatabase;Integrated security=True;MultipleActiveResultSets=True 此方法不适用于EF6,出现异常 未找到“System.Data.Odbc”ADO.NET提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分

在EF5之前,为了连接到SQL Server 2012,我只需要指定一个如下所示的连接字符串:

Data Source=.\SqlExpress;Initial Catalog=MyDatabase;Integrated security=True;MultipleActiveResultSets=True
此方法不适用于EF6,出现异常

未找到“System.Data.Odbc”ADO.NET提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分注册

我根本没有使用
app.config
文件,而是将上面的连接字符串传递给MyContext构造函数。为什么它试图使用Odbc提供程序,而不是使用System.Data.SqlClient

首先需要做什么才能使用EF6代码连接到SQL Server?我确保EntityFramework.dll和EntityFramework.SqlServer.dll在应用程序文件夹中都可用。我甚至在WPF项目中添加了EF6 nuget包v6.0.0.1,尽管它不直接使用EF库,并且确保自动创建的App.Config文件(由nuget)复制到应用程序(调试)文件夹中,但仍然没有成功

我还尝试在代码中手动设置提供程序:

public class OeeCoachConfiguration : DbConfiguration
{
    public OeeCoachConfiguration()
    {
        SetProviderServices("System.Data.SqlClient",
            System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
}
仍然没有成功。我的项目结构如下(简化):

WPF项目-没有对EF的引用(也尝试添加EF引用)

ViewModel类库-没有对EF的引用

模型类库-引用了EF库(两个DLL)

数据类库-引用UI库(两个DLL)


我使用的是CodeFirst方法,这个设置对EF5没有任何问题。非常感谢您的帮助。

对于我来说,这个错误是通过删除scape.ADO包解决的


编辑2013年12月20日我相信Spile.ADO软件包现在支持EF6,但我还没有测试过它。

是的,对我来说,它是通过删除Spile.ADO和Spile.EF5 nuget软件包解决的。谢谢。

选项1:尝试在可执行项目的app.config中添加以下内容

<entityFramework>        
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

选项2:如果要使用基于代码的提供程序注册,请遵循上的指南

  • 确保DbConfiguration与应用程序的DbContext位于同一程序集中

我也遇到了同样的问题,我最终尝试了以下方法,效果很好(保留Gliesh EF5和Gliesh ADO软件包)

在web.config中,我添加了一个现有提供者行的副本,但将其不变量名更改为“System.Data.Odbc”


希望这有帮助


Jonathan

我没有任何与ADO(或EF)相关的第三方控件。您的连接字符串是否指定了提供程序?不,我的连接字符串与我之前所写的完全相同。似乎我完全忘记了我在项目中使用的EF profiler。事实证明这是在制造问题,所以我将接受这个答案作为正确的指针。
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.Odbc" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>