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

时间:2012-06-09 23:05:12

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

我昨天将我的电脑从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'的构造函数。

My 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并重新安装了它,但这并没有解决问题。

我正在使用SQL Server 2012 + Tools和IIS express实体框架5.0 RC(在VS2010中如前所述)。

3 个答案:

答案 0 :(得分:8)

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

  <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文件来发现这一点。我注意到了另一个不同之处。

My Entity Framework程序集的版本为4.4.0.0(尽管我从NuGet安装了5.0 RC)。我创建的新项目具有版本5.0.0.0的程序集。任何人都可以解释一下吗?

答案 1 :(得分:1)

你可以检查几件事:

  • 它正在尝试连接到SQL Express。是否安装了SQL Express?当你升级windows时,安装会发生什么事。
  • 尝试连接SQL Express的程序的安全上下文是什么?这可能是一个供股问题吗?

修改更多想法:

  • 与为项目选择的.net框架版本相关
  • 是如何引用EF的?复制local = true?

答案 2 :(得分:-2)

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

update-package EntityFramework -pre

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