#entity-framework #entity #entity-framework-4.1
#entity-framework #сущность #entity-framework-4.1
Вопрос:
Хорошо, я собираюсь разбить свою клавиатуру молотком из-за этого. В эти выходные я решил поиграть с EF и запустил проект в версии 4.0. Я узнаю, что 4.1 отсутствует, поэтому я загружаю и устанавливаю пакет.
Представьте мое удивление, когда я пытаюсь использовать метод Load() в dbExtensions, и он не может его найти. Итак, я добавляю ссылку на двоичный файл EntityFramework, созданный установщиком, удаляю ссылку System.Data.Entity из проекта, перестраиваю, и он говорит
«Тип ‘System.Data.Objects.ObjectContext’ определен в сборке, на которую нет ссылки. Необходимо добавить ссылку на сборку ‘System.Data.Entity, Version= 4.0.0.0, Culture = нейтральный, PublicKeyToken=b77a5c561934e089’.»
Я пытался восстановить свою модель, я пытался удалять вещи, я пытался напрямую ссылаться на 4.1 через usings. Ничего не работает.
Я, очевидно, упускаю что-то основное. Как, черт возьми, мне сказать visual Studio использовать платформу 4.1 ??!!
Ответ №1:
Мне удалось найти отсутствующую функцию .Load(), добавив следующее:
using System.Data.Entity;
Комментарии:
1. Это и есть ответ. Load — это метод расширения в System.Data.Entity.
2. Вау. Для меня было слишком по-человечески понять, что это проблема «использования». Но это было. Большое спасибо. Отличный ответ.
Ответ №2:
Entity Framework 4.1 не является отдельной версией. Ему все еще нужен Entity Framework 4.0 и его сборка, поэтому вы не можете удалить System.Data.Entity.dll из ваших ссылок. Также EFv4.1 в основном посвящен новому DbContext API, поэтому, если вы не собираетесь переходить от объектов Entity к POCOs и DbContext
вы не получите никакого преимущества, ссылаясь EntityFramework.dll (кроме строго типизированных Include
на IQueryable
).
Ответ №3:
Добавьте ссылку на System.Data.Entity.dll
из любого:
GAC (вкладка .Net в диалоговом окне добавления ссылки)
или
C:Program FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.0System.Data.Entity.dll
Ответ №4:
У меня та же проблема, и я все еще не знаю основную причину.
Наконец, я использую какое-то альтернативное решение:
var query = from d ...
query.Load();
или
(DbSet)context.myentity).Load();
Пожалуйста, попробуйте.
Комментарии:
1. И в чем разница с простым вызовом
query.ToList()
?2. «Запрос выполняется, когда: * Он перечисляется с помощью инструкции foreach (C #) или для каждого (Visual Basic) оператора. * Он перечисляется с помощью операции сбора, такой как toArray, ToDictionary или ToList. * Операторы LINQ, такие как First или Any, указаны во внешней части запроса. * Метод расширения Load вызывается в наборе баз данных.» msdn.microsoft.com/en-us/library/gg696167(v=VS.103).aspx
3.@LadislavMrnka Разница между
Load
иToList
заключается в том, что с помощьюLoad
не создается список. Это эквивалентно вызову ToList без фактического создания списка. ссылка
Ответ №5:
Сообщение Ладислава является точным. Чтобы добавить немного больше деталей, этот ADO.Сообщение в блоге Net team объясняет, как правильно заменить генерацию кода в проекте EF 4.0 на EF 4.1.
Однако у меня возникла аналогичная проблема после обновления до 4.1 и использования DbContext (включая некоторые другие функции) У меня также нет метода .Load(). Я думаю, вы были в том же месте, что и я, до того, как начали (без необходимости) возиться со ссылками.
Проверьте ссылку выше, дайте мне знать, если это поможет, и если вы найдете решение для отсутствующей функции .Load(), обязательно сообщите нам об этом.