Qualcuno può capire perché continuo a ricevere questo errore testando l’EF 5 beta

Installato Visual Studio 11 beta come voluto testare EF 5 beta, ma continua a colpire questo errore.

Metodo non trovato: ‘Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)’.

Project è una nuova applicazione vuota MVC3 e di seguito è riportato un codice che illustra come si verifica l’errore.

public class Blog { public int Id { get; set; } public string Name { get; set; } } public class EFDbContext : DbContext { public DbSet 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(); } } 

Ho cercato l’errore su google ma non è emerso nulla e non sono abbastanza sicuro di quale errore si riferisca a. Ho aggiunto uno snippet dello stacktrace qui sotto nel caso in cui possa essere d’aiuto.

[MissingMethodException: Metodo non trovato: ‘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.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.Initialize() +137
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.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
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 (Oggetto Object) +200 System.Data.Entity.DbSet`1.Add (Entità TEntity) +72

Sembra che tu stia utilizzando EF5 EntityFramework.dll, ma poi esegui con .NET 4 installato anziché .NET 4.5.

Se si intende utilizzare .NET 4.5, assicurarsi che .NET 4.5 sia installato sulla macchina su cui si sta eseguendo il codice. VS11 installa .NET 4.5 per te, ma puoi anche installare solo il runtime su una macchina non-dev.

Se si intende utilizzare .NET 4, assicurarsi che il progetto sia impostato su .NET 4 di destinazione, quindi disinstallare e reinstallare il pacchetto NuGet EF5. È necessario disinstallare e reinstallare in quanto NuGet non modificherà automaticamente l’assembly in uso quando il progetto viene riaggiustato.

Aggiornare:

Potresti anche vedere questa eccezione se hai ancora installato l’EF June CTP o se non è riuscito a disinstallarlo correttamente. Si prega di provare a disinstallare completamente il CTP di giugno prima di installare VS11. Se i problemi persistono, aprire un “Prompt dei comandi dello sviluppatore” come amministratore ed eseguire:

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

Se il problema persiste, puoi provare a forzare la disinstallazione dal GAC con:

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

Assicurati di aver installato .net 4.5 sul tuo sistema di destinazione. Ho avuto lo stesso messaggio, ho scoperto che non avevo installato .net 4.5 su uno dei miei server della farm.

Se hai problemi a sbarazzarti del 4.2 System.Data.Entity dal GAC come ho fatto io, dove si lamentava che l’installatore dipendesse da questo,

 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 

puoi sbarazzarti delle chiavi nel registro da questa cartella:

 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global 

e rieseguire il comando gacutil / uf

Ho risolto questo problema rimuovendo la politica:

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

Che aveva questa informazione: … bindingRedirect oldVersion = “4.0.0.0” newVersion = “4.2.0.0” …

Spero che aiuti Rui