已安装Visual Studio 11 beta,希望测试EF 5测试版,但仍然会出现错误。
找不到方法:'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)'。
Project是一个新的空白MVC3应用程序,下面是一些代码,用于说明错误是如何发生的。
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
public class HomeController : Controller
{
protected EFDbContext Db = new EFDbContext();
public ActionResult Index()
{
Blog B = new Blog();
B.Name = "Test";
Db.Blogs.Add(B);
Db.SaveChanges();
return View();
}
}
在谷歌上查找错误但没有出现,我不太确定错误指的是什么。 我在下面添加了一个堆栈跟踪片段,以防它有用。
[MissingMethodException:找不到方法:'无效 System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(布尔值)”。] System.Data.Entity.Internal.LazyInternalContext.InitializeContext()+ 0 System.Data.Entity.Internal.InternalContext.Initialize()+31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 entityType)+39
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +137
1.get_InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
1.Add(Object entity)+200 System.Data.Entity.DbSet`1.Add(TEntity entity)+72
System.Data.Entity.Internal.Linq.InternalSet
答案 0 :(得分:60)
看起来您正在使用EF5 EntityFramework.dll,但随后安装了.NET 4而不是.NET 4.5。
如果您打算以.NET 4.5为目标,请确保在运行代码的计算机上安装了.NET 4.5。 VS11为您安装.NET 4.5,但您也可以在非开发机器上安装运行时。
如果您打算以.NET 4为目标,请确保将项目设置为目标.NET 4,然后卸载并重新安装EF5 NuGet软件包。您必须卸载并重新安装,因为在重新规划项目时,NuGet不会自动更改正在使用的程序集。
<强>更新强>
如果您仍安装了EF June CTP或者无法正确卸载,您可能还会看到此异常。在安装VS11之前,请尝试完全卸载June CTP。如果您仍然看到问题,请以管理员身份打开“开发人员命令提示符”并运行:
gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
如果仍然失败,那么您可以尝试使用以下命令从GAC强制卸载:
gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
答案 1 :(得分:5)
确保在目标系统上安装了.net 4.5。我收到了相同的消息,结果发现我没有在我的一个服务器场上安装.net 4.5。
答案 2 :(得分:0)
如果您无法像我一样从GAC中删除4.2 System.Data.Entity,它抱怨安装程序依赖它,
G:\Program Files (x86)\Microsoft Visual Studio 2012 Ultimate\VC>gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.17929
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly: System.Data.Entity, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b
77a5c561934e089, processorArchitecture=MSIL
Assembly could not be uninstalled because it is required by Windows Installer
Number of assemblies uninstalled = 0
Number of failures = 0
你可以从这个文件夹中删除注册表中的键:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global
并重新运行gacutil / uf命令
答案 3 :(得分:0)
我解决了删除政策的问题:
C:\的Windows \ Microsoft.NET \组件\ GAC_MSIL \ policy.4.0.system.data.entity \ v4.0_0.0.0.0__b77a5c561934e089 \ policy.4.0.system.data.entity.config
哪位有此信息: ... bindingRedirect oldVersion =“4.0.0.0”newVersion =“4.2.0.0” ...
希望它有所帮助 锐