36

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

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

当我打电话时,这会被击中

if (Membership.ValidateUser(model.UserName, model.Password)) {}

在不确定为什么会出现此错误之前,这曾经可以正常工作。有什么建议么?

4

10 回答 10

32

EF 6 没有System.Data.Objects.ObjectContext。EF 6 已将一些类型(包括ObjectContext, from )System.Data.Entity.dll移入EntityFramework.dll,并更改了它们的命名空间。您收到此错误的事实表明您没有尝试重新编译您的应用程序,您只是替换EntityFramework.dll并希望获得最好的结果。那是行不通的。您需要更新代码以使用 EF 6:您需要删除对 的引用System.Data.Entity.dll,并更新代码以引用新类型。

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

于 2013-01-01T20:54:11.523 回答
24

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

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

于 2014-02-18T20:04:06.043 回答
14

我也在用EF 6

我设法解决了卸载软件包Microsoft.AspNet.Providers.Corev. 1.2 的问题。我使用的是 1.1 版。如果您像我一样正在使用LocaDb,则必须卸载该LocaDb软件包,因为它依赖于该软件包。当然,您必须再次重新安装 LocaDb ......

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

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

有一个关于此问题的 Microsoft Connect 错误:

Microsoft.AspNet.Providers.Core 与 EF6 不兼容

于 2013-04-18T22:27:01.030 回答
5

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

于 2014-01-07T12:59:26.913 回答
2

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

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

于 2013-10-22T21:53:48.783 回答
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)。

于 2015-01-01T14:19:03.353 回答
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. 删除了以下 using 声明:

    使用 System.Data.Entity;

    使用 System.Data.Metadata.Edm;

    使用 System.Data.Objects;

    使用 System.Web.UI.WebControls;

瞧,代码正在编译和工作。

于 2015-10-01T12:54:55.983 回答
1

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

于 2015-08-17T04:04:00.053 回答
1

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

  • 使用 Nuget 重新安装 EF
  • 删除 .edmx 文件并使用表重新创建它
于 2016-08-12T14:57:38.873 回答
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;
<#
于 2016-06-16T13:04:56.493 回答