29

安装Visual Studio 11 Beta版为想考EF 5测试阶段,但不停的按这样的错误。任何人都可以发现为什么我不断收到此错误测试EF 5测试版

未找到方法:'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)'。

项目是一个新的空白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 系统。 Data.Entity.Internal.InternalContext.Initialize()31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 的EntityType)39
System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext () 38 System.Data.Entity.Internal.Linq.InternalSet.新增210(对象实体)+200 System.Data.Entity.DbSet`1.Add(TEntity实体)+72

回答

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六月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 
+0

欣赏响应。不过,我安装了.NET 4.5,我的项目也是针对.net 4.5框架。我试图在VS 11 Ultimate Beta和.Net 4.5 Beta框架中运行EF 5.0 beta。我将尝试卸载VS11和.Net 4.5框架并重新开始。 – Drauka 2012-03-07 21:06:26

+0

卸载vs11测试版和4.5框架,并重新安装vs11测试版,包括4.5 .... 问题仍然存在,我得到相同的错误。 – Drauka 2012-03-07 22:52:23

+0

你能在GAC中找到System.Data.Entity.dll的文件版本吗?在Windows资源管理器中,打开文件夹C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Data.Entity \ v4.0_4.0.0.0__b77a5c561934e089或您计算机上的等效文件。右键单击System.Data.Entity.dll,选择详细信息选项卡,然后查看产品版本。如果它是“4.0.30319.17379”,那么你已经安装了.NET 4.5。如果它是“4.0.30319.1”,那么你以某种方式仍然安装了.NET 4。 – 2012-03-07 23:32:47

5

确保你的目标系统上安装了.net 4.5。我有同样的消息,事实证明,我没有安装在我的一个服务器场中的.net 4.5。

0

如果你有麻烦摆脱4.2 System.Data的。从GAC像我一样,在那里抱怨安装程序依赖于它的实体,

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命令

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” ...

希望它帮助 锐

相关问题