Тип или имя пространства имен 'Objects' не существует в пространстве имен 'System.Data'


102

Я использую сущности, C # и SQL Server для создания многоуровневого приложения. Я создаю несколько базовых классов, общих для всех моих компонентов DAL. В этом базовом классе я хочу обрабатывать состояние подключения базового класса ObjectContext, унаследованного объектом сущностей.

Компиляция вызывает следующую ошибку:

Тип или имя пространства имен Objects не существует в пространстве имен System.Data (вам не хватает ссылки на сборку?)

Кроме того, оператор using System.Data.Objects не разрешается по той же причине.

Я попытался добавить сборку в качестве ссылки, но не смог найти ее на вкладке .NET ссылок на сборки.

Есть предположения? Спасибо!

Ответы:


208

Вам нужно добавить ссылку на сборку .NET System.Data.Entity.dll.


1
Это сработало! Любопытно, действительно ли пространство имен System.Data.objects присутствует в System.Data.Entity?
Pencilslate

52

Если вы используете Entity Framework 6, пространство имен изменилось. Вы хотите использовать

System.Data.Entity.Core.Objects.ObjectQuery

У меня Entity Framework 6.1.3 установлен через диспетчер пакетов nuget. У меня ЕЩЕ нет ссылки на сборку Microsoft System.Data.Entity. Это дает мне ошибки. Итак, мой вопрос в том, что мне нужно ссылаться на System.Data.Entity FIRST перед добавлением этого оператора using?
vibs2006,

31

Я обновился с EF5 до EF6 некоторое время назад и постоянно сталкивался с этой проблемой. Я бы временно исправил это, обновив сгенерированный код для ссылки System.Data.Entity.Core.Objects, но после генерации он будет снова изменен (как и ожидалось с момента его создания).

Это навсегда решило проблему:

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

Если у вас есть какие-либо модели, созданные с помощью EF Designer, вам необходимо обновить шаблоны генерации кода, чтобы сгенерировать код, совместимый с EF6. Примечание. В настоящее время для Visual Studio 2012 и 2013 доступны только шаблоны EF 6.x DbContext Generator.

  1. Удалите существующие шаблоны генерации кода. Эти файлы обычно будут называться <edmx_file_name> .tt и <edmx_file_name> .Context.tt и будут вложены в ваш edmx-файл в обозревателе решений. Вы можете выбрать шаблоны в обозревателе решений и нажать Delклавишу, чтобы удалить их.
    Примечание. В проектах веб-сайтов шаблоны не будут вложены в файл edmx, а будут перечислены рядом с ним в обозревателе решений.
    Примечание. В проектах VB.NET вам нужно будет включить «Показать все файлы», чтобы иметь возможность видеть вложенные файлы шаблонов.
  2. Добавьте соответствующий шаблон генерации кода EF 6.x. Откройте свою модель в EF Designer, щелкните правой кнопкой мыши область конструктора и выберите Добавить элемент генерации кода ...
    • Если вы используете DbContext API (рекомендуется), то EF 6.x DbContext Generator будет доступен на вкладке « Данные ».
      Примечание. Если вы используете Visual Studio 2012, вам необходимо установить инструменты EF 6, чтобы иметь этот шаблон. Подробности см. В разделе Получить Entity Framework .
    • Если вы используете ObjectContext API, вам нужно будет выбрать вкладку Online и выполнить поиск EF 6.x EntityObject Generator .
  3. Если вы применили какие-либо настройки к шаблонам генерации кода, вам нужно будет повторно применить их к обновленным шаблонам.


3

если вы хотите использовать "System.Data.Objects.EntityFunctions"

используйте "System.Data.Entity.DbFunctions" в EF 6.1+


3

В моем случае для EF 6+ при использовании этого:

System.Data.Entity.Core.Objects.ObjectQuery

В рамках этой команды:

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

У меня такая ошибка:

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'

Итак, мне пришлось использовать это:

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

Конечно, ваша подпись анонимного типа может отличаться.

HTH.


0

Я добавил ссылку на файл .dll, для System.Data.Linq этого было недостаточно. Вы можете найти .dll в различных каталогах для следующих версий.

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
Исправление это отвечает на вопрос, где: Тип или имя пространства имен 'Linq' не существует в пространстве имен 'System.Data'
Том Куббинс,

0

Вам нужно добавить ссылку на сборку .NET System.Data.Linq


Привет, Null29, не могли бы вы объяснить, чем ваш ответ лучше, чем уже предоставленные?
Ноэль Видмер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.