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!

Bleistiftscheibe
quelle

Antworten:

207

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

Joshua Belden
quelle
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
James
quelle
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.
Tim Valentine
quelle
3

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

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

Sumanth
quelle
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.

user8128167
quelle
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

Tom Cubbins
quelle
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

Null29
quelle
Hallo Null29, können Sie erklären, wie Ihre Antwort besser ist als die bereits bereitgestellten?
Noel Widmer