J'ai récemment mis à niveau d'Entities Framework 5 vers Entities Framework 6 Alpha 2 et j'obtiens l'erreur suivante:
Méthode non trouvée: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext ()'.
Ça se fait frapper quand j'appelle
if (Membership.ValidateUser(model.UserName, model.Password)) {}
Cela fonctionnait bien avant de ne pas savoir pourquoi cela provoquait cette erreur. Aucune suggestion?
EF 6 n'a pas System.Data.Objects.ObjectContext
. EF 6 a déplacé certains types, notamment ObjectContext
, de System.Data.Entity.dll
en EntityFramework.dll
, et ont changé leurs espaces de noms. Le fait que vous obteniez cette erreur suggère que vous n'avez pas tenté de recompiler votre application, vous avez simplement remplacé EntityFramework.dll
et espérait le meilleur. Ça ne marchera pas. Vous devez mettre à jour votre code pour fonctionner avec EF 6: vous devez supprimer vos références à System.Data.Entity.dll
, et mettez à jour votre code pour faire référence aux nouveaux types.
Il est possible que la référence à IObjectContextAdapter.ObjectContext
la propriété se trouve dans une bibliothèque que vous utilisez, mais il est fort probable qu'elle se trouve dans votre propre code. Le message d'erreur (dans la partie que vous n'avez pas incluse dans votre question) devrait vous dire d'où il vient.
Pour moi, la mise à jour ci-dessous a fonctionné:using System.Data.Objects; --> using System.Data.Entity.Core.Objects;
using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;
J'utilise également EF 6
.
J'ai réussi à résoudre le problème de désinstallation du package Microsoft.AspNet.Providers.Core
v. 1.2. J'utilise la version 1.1 à la place. Si vous êtes comme moi et que vous utilisez LocaDb
, vous devrez désinstaller le package LocaDb
car cela dépend de ce package. Bien sûr, vous devrez réinstaller LocaDb à nouveau ...
Vous pouvez récupérer la version 1.1 à l'aide de la console NuGet Package Manager dans Visual Studio:
Install-Package Microsoft.AspNet.Providers.Core -Version 1.1
Un bogue Microsoft Connect a été corrigé concernant ce problème:
La nouvelle version 2.0 des fournisseurs ( http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/ ) sont compatibles EF6 (ils ne fonctionneront en fait qu'avec EF6).
J'ai réussi à résoudre ce problème en supprimant les fournisseurs AspNet que j'avais installés via Nuget, qui était marqué comme obsolète. Cette opération a également désinstallé Entity Framework.
J'ai ensuite installé les nouveaux fournisseurs universels AspNet, puis Entity Framework 6, et tous mes problèmes ont été résolus.
Il a une ancienne version associée au fichier edmx pour cela:
Ce qui a fonctionné pour moi était le suivant:
Installez la dll 'Microsoft.AspNet.DataSource' avec:
PM> Package d'installation Microsoft.AspNet.EntityDataSource
Référence "Microsoft.AspNet.DataSource.dll" dans votre projet.
Ajout des déclarations d'utilisation suivantes:
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Core.Objects;
using Microsoft.AspNet.EntityDataSource;
Suppression des éléments suivants à l'aide de déclarations:
using System.Data.Entity;
using System.Data.Metadata.Edm;
using System.Data.Objects;
using System.Web.UI.WebControls;
Voila, le code se compile et fonctionne.
Cela se produit lorsque l'entité framework n'est pas en mesure de trouver la méthode dans la bibliothèque d'infrastructure dotnet installée sur la machine. Installez donc le framework dotnet 4.5.2 ou supérieur. Cela résoudra le problème.
Vérifiez ce lien
http://visualstudiomagazine.com/articles/2014/03/01/whats-new-in-entity-framework-6.aspx
J'ai mis à jour l'EF 6.2 et obtiens la même erreur et trouve la solution sous forme de jachères
Remplacez l'espace de noms System.Data.Entity par System.Data.Entity.Core, y compris toutes les références aux espaces de noms System.Data. * (Par exemple, System.Data.Objects devient System.Data.Entity.Core.Objects).
Une solution rapide et simple pour moi a été de supprimer les assemblys incriminés (obsolètes) et d'ajouter une référence à la nouvelle bibliothèque. Le code a été modifié dans le Context.tt et ressemble à ceci:
if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects; // The Assembly you need
using System.Linq;
<#
}
Avant toute modification, il était apparu comme tel:
if (container.FunctionImports.Any())
{
#>
using System.Data.Objects; // Error on compile
using System.Data.Objects.DataClasses; // Error on compile
using System.Linq;
<#