近日笔者从实体框架5升级到实体框架6阿尔法2,我收到以下错误:
未找到方法: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'。
当我打电话这是击中
if (Membership.ValidateUser(model.UserName, model.Password)) {}
这用它为什么雨后春笋这个错误之前不知道做工精细。 有什么建议?
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
特性,在你使用某些库,但它很可能会在你自己的代码。 错误信息(在部分你没有在你的问题包括)应该告诉你,它是从哪里过来。
对我来说,更新下面这些工作:
using System.Data.Objects; --> using System.Data.Entity.Core.Objects;
using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;
我还使用EF 6
。
我设法解决这个问题卸载包Microsoft.AspNet.Providers.Core
诉1.2。 我使用的是1.1版来代替。 如果你和我一样,是使用LocaDb
,你必须卸载LocaDb
,因为它取决于封装包。 当然,你必须重新安装LocaDb ...
您可以使用NuGet包管理器控制台在Visual Studio中抢1.1版:
Install-Package Microsoft.AspNet.Providers.Core -Version 1.1
有一个Microsoft连接错误有关此问题的填充:
Microsoft.AspNet.Providers.Core与EF6不兼容
新的2.0版本的提供者(的http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/ )是EF6兼容(他们实际上将只与EF6工作)。
我设法通过删除我已通过的NuGet安装ASPNET供应商,这是标示为淘汰解决这个问题。 这样做也卸载实体框架。
然后我安装了新的ASPNET通用供应商,其次是实体框架6,和我所有的问题都解决。
检查此链接
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)。
当这种情况发生的实体框架是无法找到安装在机器的框架DOTNET库中的方法。 所以,安装DOTNET框架4.5.2或更高版本。 这将解决这个问题。
一个快速和简单的解决方法对我来说是删除有问题的组件(不建议使用),并添加到新库的引用。 该代码是在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;
<#