Nazwa typu lub przestrzeni nazw „Obiekty” nie istnieje w przestrzeni nazw „System.Data”

102

Używam jednostek, C # i SQL Server do tworzenia aplikacji n-warstwowej. Tworzę kilka klas podstawowych wspólnych dla wszystkich moich składników DAL. W tej klasie bazowej chcę obsłużyć stan połączenia klasy bazowej ObjectContext dziedziczonej przez obiekt jednostki.

Kompilacja zgłasza następujący błąd:

Nazwa typu lub przestrzeni nazw „Obiekty” nie istnieje w przestrzeni nazw „System.Data” (czy brakuje odwołania do zestawu?)

Ponadto instrukcja using System.Data.Objects nie jest rozwiązywana z tego samego powodu.

Próbowałem dodać zestaw jako odniesienie, ale nie mogłem go znaleźć na karcie .NET odwołań do zestawów.

jakieś pomysły? Dzięki!

ołówek
źródło

Odpowiedzi:

208

Należy dodać odwołanie do zestawu .NET System.Data.Entity.dll.

Joshua Belden
źródło
1
Zadziałało! Ciekawe, czy przestrzeń nazw System.Data.objects jest rzeczywiście obecna w ramach System.Data.Entity?
opóźniony ołówkiem
52

Jeśli używasz Entity Framework 6, przestrzeń nazw uległa zmianie. Chcesz użyć

System.Data.Entity.Core.Objects.ObjectQuery
James
źródło
Mam Entity Framework 6.1.3 zainstalowany za pośrednictwem Menedżera pakietów NuGet. Nie mam JESZCZE odwołanie do zestawu System.Data.Entity firmy Microsoft. To daje mi błędy. Więc moje pytanie brzmi: czy muszę najpierw odwołać się do System.Data.Entity przed dodaniem tego using instrukcji?
vibs2006
31

Uaktualniono z EF5 do EF6 nuget jakiś czas temu i napotykano ten problem. Naprawiłbym to tymczasowo, aktualizując wygenerowany kod do odniesienia System.Data.Entity.Core.Objects, ale po wygenerowaniu zostałby ponownie zmieniony (zgodnie z oczekiwaniami od czasu jego wygenerowania).

To rozwiązało problem na dobre:

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

Jeśli masz modele utworzone za pomocą programu EF Designer, musisz zaktualizować szablony generowania kodu, aby wygenerować kod zgodny z EF6. Uwaga: obecnie dostępne są tylko szablony generatora DbContext EF 6.x dla programu Visual Studio 2012 i 2013.

  1. Usuń istniejące szablony generowania kodu. Te pliki będą zwykle nazywane <edmx_file_name> .tt i <edmx_file_name> .Context.tt i będą zagnieżdżone w pliku edmx w Eksploratorze rozwiązań. Możesz wybrać szablony w Eksploratorze rozwiązań i nacisnąć Delklawisz, aby je usunąć.
    Uwaga: w projektach witryn sieci Web szablony nie będą zagnieżdżane w pliku edmx, ale wyświetlane obok niego w Eksploratorze rozwiązań.
    Uwaga: w projektach VB.NET musisz włączyć opcję „Pokaż wszystkie pliki”, aby móc zobaczyć zagnieżdżone pliki szablonów.
  2. Dodaj odpowiedni szablon generowania kodu EF 6.x. Otwórz model w programie EF Designer, kliknij prawym przyciskiem myszy powierzchnię projektową i wybierz opcję Dodaj element generowania kodu ...
    • Jeśli używasz interfejsu API DbContext (zalecane), generator DbContext EF 6.x będzie dostępny na karcie Dane .
      Uwaga: jeśli używasz programu Visual Studio 2012, musisz zainstalować narzędzia EF 6, aby mieć ten szablon. Aby uzyskać szczegółowe informacje, zobacz Get Entity Framework .
    • Jeśli używasz ObjectContext API, musisz wybrać kartę Online i wyszukać EF 6.x EntityObject Generator .
  3. Jeśli zastosowałeś jakiekolwiek dostosowania do szablonów generowania kodu, będziesz musiał ponownie zastosować je do zaktualizowanych szablonów.
Tim Valentine
źródło
3

jeśli chcesz użyć „System.Data.Objects.EntityFunctions”

użyj „System.Data.Entity.DbFunctions” w EF 6.1+

sumanth
źródło
3

W moim przypadku dla EF 6+, używając tego:

System.Data.Entity.Core.Objects.ObjectQuery

W ramach tego polecenia:

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

Mam ten błąd:

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'

Więc skończyło się na tym, że musiałem użyć tego:

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

Oczywiście Twój anonimowy podpis może być inny.

HTH.

user8128167
źródło
0

Dodałem odniesienie do pliku .dll, dla System.Data.Linq powyższe nie było wystarczające. Pliki .dll można znaleźć w różnych katalogach dla następujących wersji.

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

Tom Cubbins
źródło
2
Poprawka stanowi odpowiedź na pytanie, gdzie: Nazwa typu lub przestrzeni nazw „Linq” nie istnieje w przestrzeni nazw „System.Data”
Tom Cubbins
0

Musisz dodać odwołanie do zestawu .NET System.Data.Linq

Brak29
źródło
Cześć Null29, czy możesz wyjaśnić, w jaki sposób Twoja odpowiedź jest lepsza niż te już podane?
Noel Widmer