web-dev-qa-db-fra.com

Quelqu'un peut-il comprendre pourquoi je continue à avoir cette erreur en testant la version bêta de l'EF 5

Installé dans Visual Studio 11 Beta, il souhaitait tester EF 5 Bêta, mais il ne cessait de frapper.

Méthode introuvable: 'Annuler System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)'.

Project est une nouvelle application MVC3 vierge. Vous trouverez ci-dessous un code qui explique comment l'erreur se produit.

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();
    }
}

J'ai cherché l'erreur sur google, mais rien n'a été fait et je ne suis pas tout à fait sûr de l'erreur à laquelle il fait référence. J'ai ajouté un extrait de stacktrace ci-dessous au cas où cela aiderait.

[MissingMethodException: Méthode non trouvée: 'Nul 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 (Entité d'objet) +200 System.Data.Entity.DbSet`1.Add (entité TEntity) +72

30
Drauka

On dirait que vous utilisez EF5 EntityFramework.dll mais que vous exécutez alors. NET 4 est installé à la place de .NET 4.5.

Si vous envisagez de cibler .NET 4.5, assurez-vous que .NET 4.5 est installé sur la machine sur laquelle vous exécutez le code. VS11 installe .NET 4.5 pour vous, mais vous pouvez également installer uniquement le runtime sur une machine non-dev.

Si vous souhaitez cibler .NET 4, assurez-vous que votre projet est défini sur .NET 4 cible, puis désinstallez et réinstallez le package EF5 NuGet. Vous devez désinstaller et réinstaller car NuGet ne modifiera pas automatiquement l'assemblage utilisé lorsque le projet est à nouveau taré.

Mettre à jour:

Vous pouvez également voir cette exception si vous avez toujours installé EF June CTP ou si la désinstallation a échoué. S'il vous plaît essayez de désinstaller complètement le June CTP avant d'installer VS11. Si vous rencontrez toujours des problèmes, ouvrez une "invite de commande du développeur" en tant qu'administrateur et exécutez:

gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089

Si cela échoue toujours, vous pouvez alors tenter de forcer la désinstallation à partir du GAC avec:

gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
60
Arthur Vickers

Assurez-vous que .net 4.5 est installé sur votre système cible. J'ai eu le même message, il s'est avéré que .net 4.5 n'était pas installé sur l'un de mes serveurs de ferme.

5
ddd

J'ai résolu ce problème en supprimant la politique:

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

Qui avait cette information: ... BindingRedirect oldVersion = "4.0.0.0" newVersion = "4.2.0.0" ...

J'espère que ça aide Rui

0
rsantos

Si vous ne parvenez pas à vous débarrasser de la 4.2 System.Data.Entity du GAC, comme je l’ai fait, l’installateur s’est plaint que l’installateur en dépendait,

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

vous pouvez vous débarrasser des clés du registre à partir de ce dossier: 

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global

et relancez la commande gacutil/uf

0
aggaton