使用EF6连接到SQL Server

时间:2013-04-06 23:59:56

标签: 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”部分中注册

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

使用EF6代码优先连接到SQL Server需要做些什么?我确保EntityFramework.dll和EntityFramework.SqlServer.dll都在Application文件夹中可用。我甚至在WPF项目中添加了EF6 nuget包v6.0.0.1,虽然它不直接使用EF库,并确保将自动创建的App.Config文件(由nuget)复制到Application(Debug)文件夹 - 仍然没有成功。

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

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没有任何问题。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

对我来说,删除Glimpse.ADO包

解决了这个错误

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

答案 1 :(得分:5)

我遇到了同样的问题,我最终尝试了以下内容并且有效(保留了Glimpse EF5和Glimpse ADO软件包)

在web.config中,我添加了现有提供程序行的副本,但将其invariantName更改为“System.Data.Odbc”。

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

希望这会有所帮助。

乔纳森

答案 2 :(得分:2)

是的,对我来说,通过删除Glimpse.ADO和Glimpse.EF5 nuget包解决了这个问题。谢谢。

答案 3 :(得分:1)

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

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

选项2:如果您想使用基于代码的提供商注册,请遵循Entity Framework Providers for EF6

上的指南
  • 确保在与应用程序的DbContext相同的程序集中使用DbConfiguration。