EF 6 System.Data.Objects.ObjectContext错误

时间:2012-12-31 21:45:36

标签: c# asp.net-mvc asp.net-mvc-4 azure-sql-database entity-framework-6

我最近从实体框架5升级到实体框架6 Alpha 2,我收到以下错误:

  

找不到方法:' System.Data.Objects.ObjectContext   System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'

当我打电话

时,这会受到打击
if (Membership.ValidateUser(model.UserName, model.Password)) {}

以前工作正常,不知道为什么会出现这个错误。有什么建议吗?

10 个答案:

答案 0 :(得分:29)

EF 6没有System.Data.Objects.ObjectContext。 EF 6已将某些类型(包括ObjectContext)从System.Data.Entity.dll移至EntityFramework.dll,并更改了其名称空间。您收到此错误的事实表明您没有尝试重新编译您的应用程序,您只需更换EntityFramework.dll并希望获得最佳效果。那不行。您需要更新代码才能使用EF 6:您需要删除对System.Data.Entity.dll的引用,并更新代码以引用新类型。

IObjectContextAdapter.ObjectContext属性的引用可能在您正在使用的某个库中,但很可能它将在您自己的代码中。错误消息(在您未在问题中包含的部分)应告诉您它的来源。

答案 1 :(得分:21)

对我来说,更新这些以下工作:
using System.Data.Objects; --> using System.Data.Entity.Core.Objects;

using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;

答案 2 :(得分:14)

我也在使用EF 6

我设法解决了卸载软件包Microsoft.AspNet.Providers.Core v.1.2的问题。我正在使用1.1版。如果您像我一样并且正在使用LocaDb,则必须卸载LocaDb包,因为它取决于该包。当然你需要重新安装LocaDb ......

您可以使用Visual Studio中的NuGet包管理器控制台获取v.1.1:

Install-Package Microsoft.AspNet.Providers.Core -Version 1.1

此问题填写了Microsoft Connect错误:

Microsoft.AspNet.Providers.Core incompatible with EF6

答案 3 :(得分:5)

新的2.0版本的提供程序(http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/)与EF6兼容(它们实际上只适用于EF6)。

答案 4 :(得分:2)

我设法解决了这个问题,删除了我通过Nuget安装的AspNet Providers,它被标记为已弃用。这样做也会卸载实体框架。

然后我安装了新的AspNet Universal Providers,然后安装了Entity Framework 6,我的所有问题都得到了修复。

答案 5 :(得分:1)

检查此链接

http://visualstudiomagazine.com/articles/2014/03/01/whats-new-in-entity-framework-6.aspx

我更新了EF 6.2并得到了同样的错误并找到了解决方案作为休闲

将命名空间System.Data.Entity更改为System.Data.Entity.Core,包括对System.Data。*命名空间的任何引用(例如,System.Data.Objects变为System.Data.Entity.Core.Objects)

答案 6 :(得分:1)

当实体框架无法在机器中安装的dotnet框架库中找到该方法时,会发生这种情况。所以安装dotnet framework 4.5.2或更高版本。它将解决问题。

答案 7 :(得分:1)

对我有用的是:

  1. 使用以下命令安装dll'Microsoft.AspNet.DataSource'。

    PM>安装包Microsoft.AspNet.EntityDataSource

  2. 在项目中引用“Microsoft.AspNet.DataSource.dll”。

  3. 使用声明添加以下内容:

    使用System.Data.Entity.Core.Metadata.Edm;

    使用System.Data.Entity.Core.Objects;

    使用Microsoft.AspNet.EntityDataSource;

  4. 使用声明删除了以下内容:

    使用System.Data.Entity;

    使用System.Data.Metadata.Edm;

    使用System.Data.Objects;

    使用System.Web.UI.WebControls;

  5. Voila,代码正在编译和工作。

答案 8 :(得分:1)

它有一个与edmx文件关联的旧版本:

  • 使用Nuget重新安装EF
  • 删除.edmx文件并使用表格重新创建

答案 9 :(得分:0)

对我来说,一个快速而简单的解决方法是删除有问题的程序集(不建议使用)并添加对新库的引用。代码在Context.tt中修改,如下所示:

if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects; // The assembly you need
using System.Linq;
<#
}

在进行任何修改之前,它就是这样的:

if (container.FunctionImports.Any())
{
#>
using System.Data.Objects; // Error on compile
using System.Data.Objects.DataClasses; // Error on compile
using System.Linq;
<#