web-dev-qa-db-fra.com

Erreur System.Data.Objects.ObjectContext EF 6

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?

34
Joe

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.

31
user743382

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;

21
piris

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:

Microsoft.AspNet.Providers.Core incompatible avec EF6

14
Leniel Maccaferri

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

5
Fabian Nicollier

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.

2
Eraph

Il a une ancienne version associée au fichier edmx pour cela:

  • Réinstaller EF avec Nuget
  • Supprimez le fichier .edmx et recréez-le avec des tableaux
1
Cesar Alvarado Diaz

Ce qui a fonctionné pour moi était le suivant:

  1. Installez la dll 'Microsoft.AspNet.DataSource' avec:

    PM> Package d'installation Microsoft.AspNet.EntityDataSource

  2. Référence "Microsoft.AspNet.DataSource.dll" dans votre projet.

  3. Ajout des déclarations d'utilisation suivantes:

    using System.Data.Entity.Core.Metadata.Edm;

    using System.Data.Entity.Core.Objects;

    using Microsoft.AspNet.EntityDataSource;

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

1
Anytoe

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.

1
swaraj

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

1
TSN_Prasad

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;
<#
0
Anthony Mason