【问题标题】:Connecting to SQL Server with EF6使用 EF6 连接到 SQL Server
【发布时间】:2013-04-06 23:59:56
【问题描述】:

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

【问题讨论】:

    标签: entity-framework entity-framework-6


    【解决方案1】:

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

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

    【讨论】:

    • 我没有任何与 ADO(或 EF)相关的第三方控件。
    • 您的连接字符串是否指定了提供者?
    • 不,我的连接字符串与我所写的完全一样。
    • 看来我完全忘记了我在项目中使用的 EF 分析器。原来它正在制造问题,所以我将接受这个答案作为正确的指针。
    【解决方案2】:

    我遇到了同样的问题,我最终尝试了以下方法并且成功了(保留 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>
    

    希望这会有所帮助。

    乔纳森

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        选项 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 上的指南

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 2015-10-30
          • 2011-11-18
          • 2016-04-14
          • 2014-02-05
          • 2010-12-17
          相关资源
          最近更新 更多