【问题标题】:Constructor on type 'System.Data.Entity.Infrastructure.SqlConnectionFactory' not found找不到类型“System.Data.Entity.Infrastructure.SqlConnectionFactory”的构造函数
【发布时间】:2012-06-09 23:05:12
【问题描述】:

我昨天将我的电脑从 Windows 7“升级”到了 Windows 8,所以现在我正在使用 Visual Studio 2012,并打开我的 Visual Studio 2010 项目。

该项目一直运行良好,但在 Visual Studio 2012 中无法运行。我遇到了一些奇怪的错误,但我已修复这些错误。现在我遇到了一个错误,我无法修复,也无法在 Google 上找到任何相关信息:

我得到了这个例外:

未能将 Database.DefaultConnectionFactory 设置为应用程序配置中指定的“System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework”类型的实例。有关详细信息,请参阅内部异常。

有以下内部异常:

找不到类型“System.Data.Entity.Infrastructure.SqlConnectionFactory”的构造函数。

我的 Web.Config 看起来很标准:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-WebUI-201253192737;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

存在 SqlConnectionFactory 类,它有 2 个构造函数(一个无参数,一个接受连接字符串)。我通过在我的 C# 代码中创建一个 SqlConnectionFactory 来测试它。

我已经删除了 Entity Framework 并重新安装了它,但这并没有解决问题。

我正在使用 Entity Framework 5.0 RC(如前所述在 VS2010 中运行良好)与 SQL Server 2012 + 工具和 IIS express。

【问题讨论】:

  • 您是在使用 Nuget 安装 EntityFramework 吗?

标签: asp.net-mvc entity-framework windows-8 visual-studio-2012 entity-framework-5


【解决方案1】:

我解决了这个问题。我改变了这个:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>

收件人:

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

现在它可以工作了。不过有点愚蠢,我想提供连接字符串作为参数。

我通过在 VS 2012 中使用实体框架创建一个新的 MVC 4 项目并比较 Web.Config 文件发现了这一点。我注意到另一个不同之处。

我的实体框架程序集的版本为 4.4.0.0(尽管我从 NuGet 安装了 5.0 RC)。我创建的新项目有一个版本为 5.0.0.0 的程序集。谁能解释一下?

【讨论】:

    【解决方案2】:

    您可以检查几件事:

    • 它正在尝试连接到 SQL Express。是否安装了 SQL Express?升级 Windows 时,安装是否发生了问题。
    • 试图连接到 SQL Express 的程序的安全上下文是什么?会不会是配股?

    编辑更多想法:

    • 与为项目选择的 .net 框架版本相关
    • 关于EF是如何引用的,都是引用的吗?复制本地=真?

    【讨论】:

    • 1) 是的,我已经安装了 SQL Server 2012 + Tooling,我可以通过 SSMS 连接到 SQL Server。
    • 2) 我将每个可用角色分配给每个可用用户,但没有用。无论如何,这将导致不同的错误(以前在 Windows 7 上出现过)。这个错误显然与 EF 库有关(它找不到构造函数?)。
    • 所有项目的 .NET 版本为 4.0,本地复制为真。
    【解决方案3】:

    我相信现有项目从 EF v4.3 升级到 Ef v5.0 的一个好方法是使用 Nuget 命令

    update-package EntityFramework -pre
    

    这会将配置文件中的 configsection 更新为 EF 5

    【讨论】:

    • 我强烈建议不要使用上面的代码来解决这个问题。 -pre 安装该软件包的最新预发布版本,在本文中它安装 EF6 alpha。
    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多