web-dev-qa-db-fra.com

Le type ou le nom d'espace de nom 'Objets' n'existe pas dans l'espace de nom 'System.Data'

J'utilise des entités, C # et SQL Server pour créer une application à plusieurs niveaux. Je crée des classes de base communes à tous mes composants DAL. Dans cette classe de base, je veux gérer l'état de connexion de la classe de base ObjectContext héritée par l'objet Entities.

La compilation renvoie l'erreur suivante:

Le type ou le nom de l'espace de noms 'Objects' n'existe pas dans l'espace de noms 'System.Data' (il vous manque une référence Assembly?)

En outre, l'instruction using System.Data.Objects ne se résout pas pour la même raison.

J'ai essayé d'ajouter l'Assembly comme référence, mais je ne pouvais pas le trouver dans l'onglet .NET des références d'Assembly.

Des pensées? Merci!

97
pencilslate

Vous devez ajouter une référence à .NET Assembly System.Data.Entity.dll.

198
Joshua Belden

Si vous utilisez Entity Framework 6, l'espace de nom a été modifié. Vous voulez utiliser

System.Data.Entity.Core.Objects.ObjectQuery
50
James

Mise à niveau de EF5 à EF6 nuget il y a quelque temps et rencontrais sans cesse ce problème. Je le corriger temporairement en mettant à jour le code généré pour faire référence à System.Data.Entity.Core.Objects, mais après génération, il sera modifié à nouveau (comme prévu depuis sa génération).

Cela résolut le problème pour de bon:

http://msdn.Microsoft.com/en-us/data/upgradeef6

Si vous avez créé des modèles avec EF Designer, vous devrez mettre à jour les modèles de génération de code pour générer du code compatible EF6. Remarque: Seuls les modèles EF 6.x DbContext Generator sont disponibles pour Visual Studio 2012 et 2013.

  1. Supprimer les modèles de génération de code existants. Ces fichiers seront généralement nommés <nom_fichier_edmx> .tt et <nom_fichier_edmx> .Context.tt et être imbriqué sous votre fichier edmx dans l'Explorateur de solutions. Vous pouvez sélectionner les modèles dans l'Explorateur de solutions et appuyer sur le bouton Del clé pour les supprimer.
    Remarque: Dans les projets de site Web, les modèles ne seront pas imbriqués dans votre Fichier edmx, mais répertorié à côté dans l'explorateur de solutions.
    Remarque: Dans les projets VB.NET, vous devez activer 'Show Tous les fichiers 'pour pouvoir voir les fichiers de modèle imbriqués.
  2. Ajoutez le modèle de génération de code EF 6.x approprié. Ouvrez votre modèle dans EF Designer, cliquez avec le bouton droit sur l'aire de conception et sélectionnez Ajouter un élément de génération de code ...
    • Si vous utilisez l'API DbContext (recommandé), alors EF 6.x DbContext Generator sera disponible sous les données . onglet.
      Remarque: Si vous utilisez Visual Studio 2012, vous devrez Installez EF 6 Tools pour avoir ce modèle. Voir Get Entity Framework pour plus de détails.
    • Si vous utilisez l'API ObjectContext, vous devez sélectionner l'onglet En ligne et rechercher EF 6.x. EntityObject Generator .
  3. Si vous avez appliqué des personnalisations aux modèles de génération de code, vous devez les réappliquer aux modèles mis à jour.
31
Tim Valentine

Dans mon cas pour EF 6+, en utilisant ceci:

System.Data.Entity.Core.Objects.ObjectQuery

Dans le cadre de cette commande:

var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query).ToTraceString();

J'ai eu cette erreur:

Cannot cast 'query' (which has an actual type of 'System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>') to 'System.Data.Entity.Core.Objects.ObjectQuery'

Alors j'ai fini par devoir utiliser ceci:

var sql = ((System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>)query).ToString();    

Bien entendu, votre signature de type anonyme peut être différente.

HTH.

3
user8128167

Même problème en VS 2013

J'ai ajouté dans Web.config:

<add Assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

Ça a marché comme sur des roulettes.

Je l'ai trouvé à la page: http://www.programmer.bz/Home/tabid/115/asp_net_sql/281/The-type-or-namespace-name-Objects-does-not-exist-in- the-namespace-SystemData.aspx

3
Caesar

si vous souhaitez utiliser "System.Data.Objects.EntityFunctions"

utiliser "System.Data.Entity.DbFunctions" dans EF 6.1+

2
sumanth

Vous devez ajouter une référence à .NET Assembly System.Data.Linq.

0
Null29

J'ai ajouté une référence au fichier .dll, pour System.Data.Linq, ce qui précède n'était pas suffisant. Vous pouvez trouver .dll dans les différents répertoires pour les versions suivantes.

System.Data.Linq C:\Program Files (x86)\Assemblys de référence\Microsoft\Framework\v3.5\System.Data.Linq.dll 3.5.0.0

System.Data.Linq C:\Program Files (x86)\Assemblys de référence\Microsoft\Framework.NETFramework\v4.0\Profil\Client\System.Data.Linq.dll 4.0.0.0

0
Tom Cubbins