30

安装了 Visual Studio 11 beta 来测试 EF 5 beta 但一直遇到这个错误。

找不到方法:'无效 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:找不到方法:'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)'。] System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +0 System.Data.Entity.Internal.InternalContext.Initialize () +31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39
System.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet 1.Add(Object entity) +200 System.Data.Entity.DbSet`1.Add(TEntity entity) +721.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet

4

4 回答 4

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
于 2012-03-07T18:59:11.030 回答
5

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

于 2012-12-06T18:34:24.377 回答
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 命令

于 2012-12-19T12:56:31.183 回答
0

我解决了这个问题,删除了政策:

C:\Windows\Microsoft.NET\assembly\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" ...

希望对瑞有帮助

于 2013-10-17T06:47:48.907 回答