Entity framework 有人能发现为什么我在测试EF 5 beta版时一直出现这个错误吗

Entity framework 有人能发现为什么我在测试EF 5 beta版时一直出现这个错误吗,entity-framework,ef-code-first,.net-4.5,entity-framework-4.3,Entity Framework,Ef Code First,.net 4.5,Entity Framework 4.3,安装VisualStudio11beta是为了测试EF5beta,但一直遇到这个错误 找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(布尔)” Project是一个新的空白MVC3应用程序,下面是一些说明错误是如何发生的代码 public class Blog { public int Id { get; set; } public string

安装VisualStudio11beta是为了测试EF5beta,但一直遇到这个错误

找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(布尔)”

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();
    }
}
公共类博客
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类EFDbContext:DbContext
{
公共数据库集博客{get;set;}
}
公共类HomeController:控制器
{
受保护的EFDbContext Db=新的EFDbContext();
公共行动结果索引()
{
Blog B=新Blog();
B.Name=“测试”;
Db.Blogs.Add(B);
Db.SaveChanges();
返回视图();
}
}
在google上查找错误,但没有发现任何错误,我不太确定错误指的是什么。 我在下面添加了stacktrace的一个片段,以防有所帮助

[MissingMethodException:未找到方法:'Void' 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.InternalSet
1.Initialize()+137
System.Data.Entity.Internal.Linq.InternalSet
1.get\u InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet
1.ActionSet(Action-Action,EntityState-newState,Object-Entity,String-methodName)+236
System.Data.Entity.Internal.Linq.InternalSet
1.Add(对象实体)+200 System.Data.Entity.DbSet`1.Add(tenty实体)+72


看起来您正在使用EF5 EntityFramework.dll,但在运行时安装了.NET 4而不是.NET 4.5

如果您打算以.NET 4.5为目标,请确保运行代码的计算机上安装了.NET 4.5。VS11为您安装.NET4.5,但您也可以只在非开发机器上安装运行时

如果您打算以.NET 4为目标,请确保将project设置为目标.NET 4,然后卸载并重新安装EF5 NuGet软件包。您必须卸载并重新安装,因为重新调整项目时,NuGet不会自动更改正在使用的程序集

更新:

如果您仍然安装了EF June CTP,或者未能正确卸载,您也可能会看到此异常。请在安装VS11之前尝试完全卸载6月份的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

确保目标系统上已安装.net 4.5。我也收到了同样的消息,结果发现我的服务器场服务器上没有安装.net 4.5。

如果你像我一样无法从GAC中删除4.2 System.Data.Entity,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命令

我在删除策略时解决了这个问题:

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\policy.4.0.system.data.entity\v4.0_0.0.0.0_uB77A5C561934E089\policy.4.0.system.data.entity.config

其中有以下信息: ... bindingRedirect oldVersion=“4.0.0.0”newVersion=“4.2.0.0”

希望能有帮助
鲁伊

感谢您的回复。然而,我已经安装了.NET4.5,我的项目也针对.NET4.5框架。我试图在VS11终极测试版中使用.NET4.5Beta框架运行EF5.0Beta版。我将尝试卸载VS11和.Net 4.5 framework并重新开始。卸载VS11 beta和4.5 framework并重新安装VS11 beta,包括4.5。。。。问题仍然存在,我得到了相同的错误。你能在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。如果该程序集位于GAC中,则它没有完全卸载。您能否以管理员身份打开开发人员命令提示符并运行“gacutil-l System.Data.Entity”,然后让我知道它报告了什么?成功。。。从6月CTP中移除框架是可行的。但愿在我卸载它的时候,它能开箱即用:非常感谢你的帮助。