Der Typ- oder Namespace-Name 'Objekte' ist im Namespace 'System.Data' nicht vorhanden.


101

Ich verwende Entitäten, C # und SQL Server, um eine n-Tier-App zu erstellen. Ich erstelle einige Basisklassen, die allen meinen DAL-Komponenten gemeinsam sind. In dieser Basisklasse möchte ich den Verbindungsstatus der ObjectContext-Basisklasse behandeln, die vom Entitätsobjekt geerbt wird.

Das Kompilieren löst den folgenden Fehler aus:

Der Typ- oder Namespace-Name 'Objekte' ist im Namespace 'System.Data' nicht vorhanden (fehlt Ihnen eine Assemblyreferenz?)

Die using-Anweisung System.Data.Objects wird aus demselben Grund nicht aufgelöst.

Ich habe versucht, die Assembly als Referenz hinzuzufügen, konnte sie jedoch nicht auf der Registerkarte .NET der Assemblyreferenzen finden.

Irgendwelche Gedanken? Vielen Dank!

Antworten:


207

Sie müssen einen Verweis auf die .NET-Assembly System.Data.Entity.dll hinzufügen.


1
Es funktionierte! Neugierig, ob der System.Data.objects-Namespace tatsächlich in der System.Data.Entity vorhanden ist?
Bleistiftscheibe

52

Wenn Sie Entity Framework 6 verwenden, hat sich der Namensraum geändert. Sie möchten verwenden

System.Data.Entity.Core.Objects.ObjectQuery

Ich habe Entity Framework 6.1.3 über den Nuget-Paketmanager installiert. Ich habe noch nicht auf Microsofts Assembly System.Data.Entity verwiesen. Es gibt mir Fehler. Meine Frage ist also, ob ich zuerst auf System.Data.Entity verweisen muss, bevor ich diese using-Anweisung hinzufüge.
Vibs2006

31

Vor einiger Zeit wurde ein Upgrade von EF5 auf EF6 durchgeführt und dieses Problem trat immer wieder auf. Ich würde es vorübergehend beheben, indem ich den generierten Code auf Referenz aktualisiere System.Data.Entity.Core.Objects, aber nach der Generierung würde er wieder zurückgesetzt (wie erwartet seit seiner Generierung).

Dies löste das Problem endgültig:

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

Wenn Sie Modelle mit dem EF Designer erstellt haben, müssen Sie die Codegenerierungsvorlagen aktualisieren, um EF6-kompatiblen Code zu generieren. Hinweis: Derzeit sind nur EF 6.x DbContext Generator-Vorlagen für Visual Studio 2012 und 2013 verfügbar.

  1. Löschen Sie vorhandene Vorlagen zur Codegenerierung. Diese Dateien heißen normalerweise <edmx_Dateiname> .tt und <edmx_Dateiname> .Context.tt und werden im Projektmappen-Explorer unter Ihrer edmx-Datei verschachtelt. Sie können die Vorlagen im Projektmappen-Explorer auswählen und die DelTaste drücken, um sie zu löschen.
    Hinweis: In Website-Projekten werden die Vorlagen nicht unter Ihrer edmx-Datei verschachtelt, sondern im Projektmappen-Explorer daneben aufgelistet.
    Hinweis: In VB.NET-Projekten müssen Sie "Alle Dateien anzeigen" aktivieren, um die verschachtelten Vorlagendateien anzeigen zu können.
  2. Fügen Sie die entsprechende EF 6.x-Codegenerierungsvorlage hinzu. Öffnen Sie Ihr Modell im EF Designer, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche und wählen Sie Codegenerierungselement hinzufügen ...
    • Wenn Sie die DbContext-API verwenden (empfohlen), ist EF 6.x DbContext Generator auf der Registerkarte Daten verfügbar .
      Hinweis: Wenn Sie Visual Studio 2012 verwenden, müssen Sie die EF 6-Tools installieren, um diese Vorlage zu erhalten. Weitere Informationen finden Sie unter Get Entity Framework .
    • Wenn Sie die ObjectContext-API verwenden, müssen Sie die Registerkarte Online auswählen und nach EF 6.x EntityObject Generator suchen .
  3. Wenn Sie Anpassungen an den Codegenerierungsvorlagen vorgenommen haben, müssen Sie diese erneut auf die aktualisierten Vorlagen anwenden.


3

wenn Sie "System.Data.Objects.EntityFunctions" verwenden möchten

Verwenden Sie "System.Data.Entity.DbFunctions" in EF 6.1+


3

In meinem Fall für EF 6+, wenn Sie Folgendes verwenden:

System.Data.Entity.Core.Objects.ObjectQuery

Im Rahmen dieses Befehls:

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

Ich habe diesen Fehler erhalten:

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'

Also musste ich folgendes verwenden:

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

Natürlich kann Ihre anonyme Typensignatur anders sein.

HTH.


0

Ich habe einen Verweis auf die DLL-Datei hinzugefügt. Für System.Data.Linq war das oben Genannte nicht ausreichend. Sie finden .dll in den verschiedenen Verzeichnissen für die folgenden Versionen.

System.Data.Linq C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0

System.Data.Linq C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Data.Linq.dll 4.0.0.0


2
Korrektur Dies beantwortet eine Frage, bei der: Der Typ- oder Namespace-Name 'Linq' im Namespace 'System.Data'
Tom Cubbins

0

Sie müssen einen Verweis auf die .NET-Assembly System.Data.Linq hinzufügen


Hallo Null29, können Sie erklären, wie Ihre Antwort besser ist als die bereits bereitgestellten?
Noel Widmer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.