任何人都可以发现为什么我一直在测试EF 5测试版时遇到此错误

时间:2012-03-06 21:07:25

标签: entity-framework ef-code-first .net-4.5 entity-framework-4.3

已安装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.InternalSet 1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext()   +38 System.Data.Entity.Internal.Linq.InternalSet 1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet
1.Add(Object entity)+200   System.Data.Entity.DbSet`1.Add(TEntity entity)+72

4 个答案:

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

希望它有所帮助 锐