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
1.get_InternalContext () +38 System.Data.Entity.Internal.Linq.InternalSet
System.Data.Entity.Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
1.Add (Entité d'objet) +200 System.Data.Entity.DbSet`1.Add (entité TEntity) +72
System.Data.Entity.Internal.Linq.InternalSet
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
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.
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
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