Le nom de type ou d'espace de noms 'Objects' n'existe pas dans L'espace de noms 'System.Données'

J'utilise entities, C# et SQL Server pour créer une application n-tier. 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 génère l'erreur suivante:

Le type ou le nom de l'espace de noms 'objets' n'existe pas dans l'espace de noms "Système.Les données " (vous manque un référence d'assemblage?)

En outre, l'utilisation déclaration du Système.Données.Objects ne résout pas pour la même raison.

J'ai essayé d'ajouter l'assembly comme référence, mais je ne l'ai pas trouvé dans l'onglet.net des références d'assembly.

Des idées? Merci!

89
demandé sur jessehouwing 2009-08-14 02:43:34

8 réponses

Vous devez ajouter une référence au système d'assemblage. net.Données.Entité.DLL.

187
répondu Joshua Belden 2009-08-13 22:49:22

Si vous utilisez Entity Framework 6, L'Espace nom a changé. Vous voulez utiliser

System.Data.Entity.Core.Objects.ObjectQuery
47
répondu James 2014-02-18 21:27:53

Mis à jour de EF5 à EF6 nuget il y a un moment et a continué à rencontrer ce problème. Je le corrigerais temporairement en mettant à jour le code généré pour faire référence à System.Data.Entity.Core.Objects, mais après la génération, il serait modifié à nouveau (comme prévu depuis sa génération).

Cela a résolu le problème pour de bon:

Http://msdn.microsoft.com/en-us/data/upgradeef6

Si vous avez des modèles créés avec EF Designer, vous devrez mettre à jour les modèles de génération de code pour générer EF6 code compatible. Note: Il n'y a actuellement que EF 6.x modèles de générateur DbContext 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é .tt et .Contexte.tt et l'imbriquer dans votre fichier edmx dans l'Explorateur de solutions. Vous pouvez sélectionner les modèles dans L'Explorateur de solutions et appuyer sur la touche Del pour supprimer ils.
    Note: dans les projets de Site Web, les modèles ne seront pas imbriqués sous votre fichier edmx, mais répertoriés à côté de celui-ci dans L'Explorateur de solutions.
    Note: dans VB.NET projets vous devrez activer "Afficher tous les fichiers" pour pouvoir voir les fichiers de modèle imbriqués.
  2. ajouter le Fe 6 approprié.modèle de génération de code X. Ouvrez votre modèle dans EF Designer, faites un clic droit sur la surface 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 {[14] } sera disponible sous l'ongletData .
      Note: Si vous utilisez Visual Studio 2012, vous devrez installer les outils EF 6 pour avoir Ce modèle. Voir Me Entity Framework pour plus de détails.
    • Si vous utilisez L'API ObjectContext, vous devrez sélectionner l'onglet En Ligne et rechercher EF 6.X EntityObject Générateur .
  3. Si vous avez appliqué des personnalisations aux modèles de génération de code, vous devrez les appliquer de nouveau aux modèles mis à jour.
29
répondu Tim Valentine 2015-02-17 17:23:25

Même problème dans VS 2013

J'ai ajouté dans le Web.configuration:

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

Ça a marché comme un charme.

Je l'ai trouvé sur 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
répondu Caesar 2014-01-08 18:26:40

Si vous voulez utiliser " System.Données.Objet.EntityFunctions "

Utiliser " Système.Données.Entité.DbFunctions " dans EF 6.1 +

2
répondu sumanth 2014-12-17 11:22:09

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'

, Donc j'ai fini par avoir à utiliser:

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

Bien sûr, votre signature de type anonyme peut être différente.

HTH.

2
répondu user8128167 2015-09-02 18:20:12

J'ai ajouté une référence à la .fichier dll pour le Système.Données.Linq, le ci-dessus n'était pas suffisant. Vous pouvez trouver .dll dans les différents répertoires pour les versions suivantes.

Système.Données.Linq C:\Program fichiers (x86) \ assemblys de référence \ Microsoft \ Framework \ v3. 5\System.Données.Linq.DLL 3.5.0.0

Système.Données.Linq C:\Program fichiers (x86) \ assemblys de référence \ Microsoft \ Framework.NETFramework \ V4. 0\Profile \ Client \ System.Données.Linq.DLL 4.0.0.0

0
répondu Tom Cubbins 2011-08-07 19:08:39

Vous devez ajouter une référence au système d'assemblage. net.Données.Linq

0
répondu Null29 2017-06-01 13:26:18