Тип или имя пространства имен "Объекты" не существует в пространстве имен "System.Data"

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

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

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

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

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

Любые мысли? Спасибо!

Ответ 1

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

Ответ 2

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

System.Data.Entity.Core.Objects.ObjectQuery

Ответ 3

Обновлен от 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.

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

Ответ 5

В моем случае для 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();    

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

НТН.

Ответ 6

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

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

Ответ 7

Я добавил ссылку на 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

Ответ 8

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