Тип или имя пространства имен '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.

user8128167
источник
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

Ноль29
источник
Привет, Null29, не могли бы вы объяснить, чем ваш ответ лучше, чем уже предоставленные?
Ноэль Видмер