web-dev-qa-db-ja.com

EF 5ベータ版のテストでこのエラーが発生し続ける理由を誰かが見つけられますか

EF 5ベータ版をテストするためにVisual Studio 11ベータ版をインストールしましたが、エラーが発生し続けました。

メソッドが見つかりません: '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:メソッドが見つかりません: '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.InternalSet1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext()+38 System.Data.Entity.Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet
1.Add(オブジェクトエンティティ)+200 System.Data.Entity.DbSet`1.Add(TEntityエンティティ)+72

30
Drauka

EF5 EntityFramework.dllを使用しているようですが、.NET 4.5の代わりに.NET 4をインストールして実行しています。

.NET 4.5を対象とする場合は、コードを実行しているマシンに.NET 4.5がインストールされていることを確認してください。 VS11は.NET 4.5をインストールしますが、開発者以外のマシンにランタイムのみをインストールすることもできます。

.NET 4をターゲットにする場合は、プロジェクトが.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
60
Arthur Vickers

ターゲットシステムに.net 4.5がインストールされていることを確認してください。同じメッセージが表示されましたが、ファームサーバーの1つに.net 4.5がインストールされていませんでした。

5
ddd

ポリシーを削除してこの問題を解決しました:

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

それがルイに役立つことを願っています

0
rsantos

私がしたように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コマンドを再実行します

0
aggaton