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

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

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

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

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

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

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


person pencilslate    schedule 13.08.2009    source источник


Ответы (8)


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

person Joshua Belden    schedule 13.08.2009
comment
Это сработало! Любопытно, действительно ли пространство имен System.Data.objects присутствует в System.Data.Entity? - person pencilslate; 14.08.2009
comment
хм ... Я этого даже не вижу, когда ищу в nuget - person BVernon; 23.01.2021

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

System.Data.Entity.Core.Objects.ObjectQuery
person James    schedule 18.02.2014
comment
У меня Entity Framework 6.1.3 установлен через диспетчер пакетов nuget. У меня ЕЩЕ нет ссылки на сборку Microsoft System.Data.Entity. Это дает мне ошибки. Итак, мой вопрос в том, что мне нужно сначала сослаться на System.Data.Entity, прежде чем добавлять этот оператор using? - person vibs2006; 24.04.2017

Я обновился с 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. Add the appropriate EF 6.x code generation template. Open your model in the EF Designer, right-click on the design surface and select Add Code Generation Item...
    • If you are using the DbContext API (recommended) then EF 6.x DbContext Generator will be available under the Data tab.
      Note: If you are using Visual Studio 2012, you will need to install the EF 6 Tools to have this template. See Get Entity Framework for details.
    • Если вы используете ObjectContext API, вам нужно будет выбрать вкладку В сети и выполнить поиск EF 6.x EntityObject Generator.
  3. Если вы применили какие-либо настройки к шаблонам генерации кода, вам нужно будет повторно применить их к обновленным шаблонам.
person Tim Valentine    schedule 01.04.2014

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

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

person sumanth    schedule 17.12.2014

Та же проблема в VS 2013

Я добавил в Web.config:

<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

Оно работало завораживающе.

Я нашел его на странице: http://www.programmer.bz/Home/tabid/115/asp_net_sql/281/The-type-or-namespace-name-Objects-does-not-exist-in-the-namespace-SystemData.aspx

person Caesar    schedule 08.01.2014

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

person user8128167    schedule 02.09.2015

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

person Tom Cubbins    schedule 07.08.2011
comment
Исправление это отвечает на вопрос, где: Тип или имя пространства имен Linq не существует в пространстве имен System.Data. - person Tom Cubbins; 07.08.2011

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

person Null29    schedule 01.06.2017
comment
Привет, Null29, не могли бы вы объяснить, чем ваш ответ лучше, чем уже предоставленные? - person Noel Widmer; 01.06.2017