我最近从实体框架5升级到实体框架6 Alpha 2,我收到以下错误:
找不到方法:' System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'
当我打电话
时,这会受到打击if (Membership.ValidateUser(model.UserName, model.Password)) {}
以前工作正常,不知道为什么会出现这个错误。有什么建议吗?
答案 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错误:
答案 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)
对我有用的是:
使用以下命令安装dll'Microsoft.AspNet.DataSource'。
PM>安装包Microsoft.AspNet.EntityDataSource
在项目中引用“Microsoft.AspNet.DataSource.dll”。
使用声明添加以下内容:
使用System.Data.Entity.Core.Metadata.Edm;
使用System.Data.Entity.Core.Objects;
使用Microsoft.AspNet.EntityDataSource;
使用声明删除了以下内容:
使用System.Data.Entity;
使用System.Data.Metadata.Edm;
使用System.Data.Objects;
使用System.Web.UI.WebControls;
Voila,代码正在编译和工作。
答案 8 :(得分:1)
它有一个与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;
<#