Il tipo o il nome dello spazio dei nomi "Oggetti" non esiste nello spazio dei nomi "System.Data"


102

Sto usando entità, C # e SQL Server per creare un'app a più livelli. Sto creando alcune classi base comuni a tutti i miei componenti DAL. In questa classe base, voglio gestire lo stato di connessione della classe base ObjectContext ereditata da entità oggetto.

La compilazione genera il seguente errore:

Il tipo o il nome dello spazio dei nomi "Oggetti" non esiste nello spazio dei nomi "System.Data" (manca un riferimento all'assembly?)

Inoltre, l'istruzione using System.Data.Objects non viene risolta per lo stesso motivo.

Ho provato ad aggiungere l'assembly come riferimento, ma non sono riuscito a trovarlo nella scheda .NET dei riferimenti all'assembly.

qualche idea? Grazie!

Risposte:


207

È necessario aggiungere un riferimento all'assembly .NET System.Data.Entity.dll.


1
Ha funzionato! Curioso, se lo spazio dei nomi System.Data.objects è effettivamente presente all'interno di System.Data.Entity?
matite

52

Se stai usando Entity Framework 6, lo spazio dei nomi è cambiato. Vuoi usare

System.Data.Entity.Core.Objects.ObjectQuery

Ho Entity Framework 6.1.3 installato tramite il gestore di pacchetti nuget. Non ho ancora fatto riferimento all'assembly System.Data.Entity di Microsoft. Mi sta dando errori. Quindi la mia domanda è che devo fare riferimento a System.Data.Entity PRIMA prima di aggiungere l'istruzione using?
vibs2006

31

È stato aggiornato da EF5 a EF6 nuget qualche tempo fa e ha continuato a riscontrare questo problema. Lo riparerei temporaneamente aggiornando il codice generato per fare riferimento System.Data.Entity.Core.Objects, ma dopo la generazione verrebbe nuovamente modificato (come previsto da quando è stato generato).

Questo ha risolto il problema per sempre:

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

Se hai dei modelli creati con EF Designer, dovrai aggiornare i modelli di generazione del codice per generare codice compatibile con EF6. Nota: attualmente sono disponibili solo modelli EF 6.x DbContext Generator per Visual Studio 2012 e 2013.

  1. Elimina i modelli di generazione del codice esistenti. Questi file verranno in genere denominati <edmx_file_name> .tt e <edmx_file_name> .Context.tt e saranno nidificati sotto il file edmx in Esplora soluzioni. È possibile selezionare i modelli in Esplora soluzioni e premere il Deltasto per eliminarli.
    Nota: nei progetti di siti Web i modelli non verranno nidificati nel file edmx, ma elencati accanto ad esso in Esplora soluzioni.
    Nota: nei progetti VB.NET sarà necessario abilitare "Mostra tutti i file" per poter vedere i file modello nidificati.
  2. Aggiungere il modello di generazione del codice EF 6.x appropriato. Apri il tuo modello in EF Designer, fai clic con il pulsante destro del mouse sull'area di progettazione e seleziona Aggiungi elemento di generazione del codice ...
    • Se stai usando l'API DbContext (consigliato), EF 6.x DbContext Generator sarà disponibile nella scheda Dati .
      Nota: se si utilizza Visual Studio 2012, sarà necessario installare gli strumenti EF 6 per avere questo modello. Vedi Get Entity Framework per i dettagli.
    • Se stai usando l'API ObjectContext, dovrai selezionare la scheda Online e cercare EF 6.x EntityObject Generator .
  3. Se hai applicato personalizzazioni ai modelli di generazione del codice, dovrai riapplicarle ai modelli aggiornati.


3

se vuoi usare "System.Data.Objects.EntityFunctions"

utilizzare "System.Data.Entity.DbFunctions" in EF 6.1+


3

Nel mio caso per EF 6+, quando si utilizza questo:

System.Data.Entity.Core.Objects.ObjectQuery

Come parte di questo comando:

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

Ho ricevuto questo errore:

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'

Quindi ho finito per dover usare questo:

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

Ovviamente la tua firma di tipo anonimo potrebbe essere diversa.

HTH.


0

Ho aggiunto un riferimento al file .dll, per System.Data.Linq, quanto sopra non era sufficiente. È possibile trovare .dll nelle varie directory per le seguenti versioni.

System.Data.Linq C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0

System.Data.Linq C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Data.Linq.dll 4.0.0.0


2
La correzione in questo modo risponde a una domanda in cui: Il nome del tipo o dello spazio dei nomi "Linq" non esiste nello spazio dei nomi "System.Data"
Tom Cubbins

0

È necessario aggiungere un riferimento all'assembly .NET System.Data.Linq


Ciao Null29, puoi spiegarci come la tua risposta sia migliore di quelle già fornite?
Noel Widmer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.