Проблема с Entity Framework 4 - программирование
Подтвердить что ты не робот

Проблема с Entity Framework 4

Использование .NET Web API (.NET 4, EF 4), и я получаю некоторые странные ошибки при отладке и действительно не могу понять, что происходит.

Скажите в DocumentRepository У меня есть этот конструктор:

public DocumentRepository(DocPortalContext db)
{
    this._db = db;
}

Если я отлаживаю и наводил курсор на _db и сверля в элементы во всплывающем окне, я сталкиваюсь со следующими ошибками:

System.Data.Entity.Infrastructure.IObjectContextAdapter.ObjectContext = 'System.Data.Entity.DbContext' не содержит определения для 'System' и никакого метода расширения 'System', принимающего первый аргумент типа 'System.Data.Entity.DbContext '(вам не хватает директивы using или ссылки на сборку?)

и

System.Collections.Generic.ICollection > .IsReadOnly = 'System.Collections.Generic.Dictionary' не содержит определения для 'System' и никакого метода расширения 'System', принимающего первый аргумент типа 'System.Collections. Generic.Dictionary

Исключение не происходит.

Если я поставил точку прерывания в этой строке в методе репозитория - return _db.Documents.AsQueryable(); - и наведите указатель мыши на Document, я получаю следующую ошибку:

System.Linq.IQueryable.Provider = 'System.Data.Entity.Infrastructure.DbQuery' не содержит определения для 'System' и никакого метода расширения 'System', принимающего первый аргумент типа 'System.Data.Entity.Infrastructure.DbQuery 'может быть f...

Некоторая помощь будет высоко оценена.

Дополнительная информация:

Сверление в _db следующим образом дает сообщение, указанное в конце:

base (System.Data.Entity.DbContext) → Внутренний контекст → _appConfig → и, наконец, соединение по умолчанию Factory имеет следующую ошибку рядом с ним: "Для оценки функции требуется, чтобы все потоки выполнялись".

Дополнительная информация в соответствии с моим комментарием:

На самом деле это не связано с вопросом, но у меня есть мнение, что может быть что-то не так с моей установкой .NET или VS - я не знаю достаточно о том, как это сделать, может быть, один из вас Можно. Во всяком случае, я могу просмотреть URI в своем проекте WebAPI и вернуть JSON в браузер. Когда я пытаюсь использовать URI в своем проекте Website, я получаю это в своем браузере: Could not find file 'C:\Program Files (x86)\IIS Express\System.Net.Http.StreamContent'., который также попадает в качестве исключения.

4b9b3361

Ответ 1

По умолчанию EF 4 генерирует прокси-классы "на лету", которые наследуют от ваших классов POCO или ваших первых классов модели. Скорее всего, вы получаете эти ошибки во время выполнения. Странным является то, что все необходимые требования должны быть включены.

Вы уверены, что вы ссылаетесь на систему в своих классах POCO (предположим, что у вас есть классы POCO)?

Ответ 2

У всех проектов вашего решения есть такая же версия версии .NET в свойствах проекта? Согласны ли эти версии с версией MSDN, описывающей недостающие классы?

Ответ 3

Попробуйте зарегистрировать dll entity-framework dll и sql-server dll в глобальном кеше сборок с помощью gacutil.exe из командной строки visual studio

Ответ 4

Недавно я столкнулся с этой проблемой в небольшом примерном приложении, где мы просто включили пакеты nuget и создали некоторые объекты уровня данных. Это то, что мы сделали, и это решило проблему.

  • Убедитесь, что временные папки для .net чисты. обычно в временных файлах asp.net в каталоге Windows.
  • Убедитесь, что ваша визуальная студия устарела и не требует перезапуска из-за повторной установки nuget. Не уверен, что он решил или не помог, но я также проверил это и перезапустил vs.
  • Очистите проекты и убедитесь, что DLL присутствует. если вы используете какую-либо веб-матрицу dll для простого членства asp.net, убедитесь, что вы выбрали ее для локального копирования. Это была одна из проблем, когда мы собирали данные для ролей и членов для простого использования членства в mvc4, но, возможно, это не так для вашего проекта.
  • Мы также проверили, что в веб-проектах конфигурация для ef соответствует правильной версии ef.

Создайте решение и запустите его после перезапуска vs 2012, и он отлично работает. Теперь я точно не знаю, какая из этих вещей помогла решить эту проблему, но все 4 работы были выполнены в одном случае.

Просто подумал поделиться, если это поможет.

Ответ 5

Они выглядят как проблемы, связанные с несовместимостью между вашей целевой версией .Net и версией сборки, на которую вы ссылаетесь.

В этом случае вы должны убедиться, что ссылка на сборку меньше или равна вашей целевой версии .Net Framework.

Ответ 6

Я видел это сообщение много раз. 9 раз из десяти, это означает, что существует проблема с файлом App.config. Обычно это просто отсутствует. Другими словами, для каждой папки проекта вы ссылаетесь на Entity Model, вам нужно поместить в нее копию этого файла App.config. Если они уже существуют, то удалите файл App.config, который поддерживает файл edmx, и перекомпилируйте Entity Model отдельно для его регенерации. (НЕ УДАЛЯЙТЕ ФАЙЛ EDMX или КЛАСС ДИЗАЙНА) Затем вам нужно снова заменить весь App.config. Да, это отстой! Иногда LinqPad отлично подходит для проверки этой проблемы. Вы можете ссылаться на файл dll в LinqPad и пытаться запускать запросы, предоставляя вам одно и то же сообщение об ошибке, давая вам знать, что проблема заключается не только в Visual Studio.

Надеюсь, это поможет... Удачи!!!!

Ответ 7

Как вы реализуете свой репозиторий? Мне кажется, что, возможно, проблема в том, что ваше приложение работает в другом потоке, чем в вашем репозитории, и это может быть ответом на "Функция, которую оценивают, требует, чтобы все потоки выполнялись". сообщение.