Entity Framework 4.1, не удается найти метод Load()?

#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(), обязательно сообщите нам об этом.