Назва або область простору імен "Об'єкти" не існує в просторі імен "System.Data"


101

Я використовую сутності, C # і SQL Server для створення додатка n-ярусу. Я створюю базові класи, спільні для всіх моїх компонентів DAL. У цьому базовому класі я хочу обробити стан з'єднання базового класу ObjectContext, успадкованого об'єктами сутності.

Компіляція видає таку помилку:

Ім'я типу або простору імен "Об'єкти" не існує в просторі імен "System.Data" (не вистачає посилання на збірку?)

Крім того, використовуваний оператор System.Data.Objects не вирішується з тієї ж причини.

Я спробував додати збірку як довідкову, але не зміг її знайти на вкладці .NET посилання на збірку.

Будь-які думки? Дякую!

Відповіді:


207

Вам потрібно додати посилання на .NET збірку System.Data.Entity.dll.


1
Це спрацювало! Цікаво, якщо простір імен System.Data.objects дійсно присутній у System.Data.Entity?
олівцем

52

Якщо ви використовуєте Entity Framework 6, простір імен змінився. Ви хочете використовувати

System.Data.Entity.Core.Objects.ObjectQuery

У мене встановлена ​​Entity Framework 6.1.3 через nuget manager manager. У мене ще немає посилання на складання Microsoft System.Data.Entity. Це дає мені помилки. Отже, моє запитання полягає в тому, що мені потрібно посилатись на System.Data.Entity ПЕРШИМ перед тим, як додати це за допомогою оператора?
vibs2006

31

Оновлений з EF5 до EF6 деякий час повертався назад і постійно стикався з цією проблемою. Я б поправляв це виправити, оновивши згенерований код на посилання System.Data.Entity.Core.Objects, але після покоління він знову буде змінений (як і очікувалося з моменту його створення).

Це назавжди вирішило проблему:

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

Якщо у вас є які-небудь моделі, створені за допомогою конструктора EF, вам потрібно буде оновити шаблони генерації коду, щоб генерувати сумісний код EF6. Примітка: Наразі доступні лише шаблони генератора EF 6.x DbContext Generator для Visual Studio 2012 та 2013.

  1. Видаліть існуючі шаблони генерації коду. Ці файли, як правило, мають назву <edmx_file_name> .tt та <edmx_file_name> .Context.tt і вкладаються під вашим файлом edmx у Провіднику рішень. Ви можете вибрати шаблони в Провіднику рішень і натиснути Delклавішу, щоб видалити їх.
    Примітка. У проектах веб-сайтів шаблони не будуть вкладені під вашим файлом edmx, а перераховані поряд з ним у Провідника рішень.
    Примітка. У проектах VB.NET потрібно включити "Показати всі файли", щоб можна було бачити вкладені файли шаблонів.
  2. Додайте відповідний шаблон генерації коду EF 6.x. Відкрийте модель в конструкторі EF, клацніть правою кнопкою миші на поверхні дизайну та виберіть Додати елемент генерації коду ...
    • Якщо ви використовуєте API DbContext (рекомендується), то EF 6.x DbContext Generator буде доступний на вкладці Дані .
      Примітка. Якщо ви використовуєте Visual Studio 2012, вам потрібно буде встановити інструменти EF 6, щоб мати цей шаблон. Докладніше див. У розділі Отримати структуру сутності .
    • Якщо ви використовуєте API ObjectContext, вам потрібно буде вибрати вкладку Інтернет » та знайти 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: \ програмні файли (x86) \ еталонні збори \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0

System.Data.Linq C: \ Файли програми (x86) \ Довідкові збори \ Microsoft \ Framework.NETFramework \ v4.0 \ Профіль \ Клієнт \ System.Data.Linq.dll 4.0.0.0


2
Виправлення дає відповідь на питання, де: Назва або простору імен 'Linq' не існує в просторі імен 'System.Data'
Tom Cubbins

0

Вам потрібно додати посилання на .NET збірку System.Data.Linq


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