Подтвердить что ты не робот

EF 6 System.Data.Objects.ObjectContext Ошибка

Недавно я обновился от Entities Framework 5 до Entities Framework 6 Alpha 2, и я получаю следующую ошибку:

Метод не найден: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()".

Это происходит, когда я вызываю

if (Membership.ValidateUser(model.UserName, model.Password)) {}

Это работало хорошо, прежде чем не было уверенности, почему это порождает эту ошибку. Любые предложения?

4b9b3361

Ответ 1

EF 6 не имеет System.Data.Objects.ObjectContext. EF 6 переместил некоторые типы, включая ObjectContext, от System.Data.Entity.dll в EntityFramework.dll и изменил их пространства имен. Тот факт, что вы получаете эту ошибку, говорит о том, что вы не пытались перекомпилировать приложение, вы просто заменили EntityFramework.dll и надеялись на лучшее. Это не сработает. Вам необходимо обновить свой код для работы с EF 6: вам нужно удалить свои ссылки на System.Data.Entity.dll и обновить код, чтобы ссылаться на новые типы.

Возможно, ссылка на свойство IObjectContextAdapter.ObjectContext может быть в некоторой библиотеке, которую вы используете, но, скорее всего, она будет в вашем собственном коде. Сообщение об ошибке (в части, которую вы не указали в своем вопросе) должно сообщить вам, откуда она.

Ответ 2

Для меня обновлено следующее:
using System.Data.Objects; --> using System.Data.Entity.Core.Objects;

using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;

Ответ 3

Я также использую EF 6.

Мне удалось решить проблему удаления пакета Microsoft.AspNet.Providers.Core v. 1.2. Вместо этого я использую версию 1.1. Если вы похожи на меня и используете LocaDb, вам придется удалить пакет LocaDb, потому что он зависит от этого пакета. Конечно, вам придется снова установить LocaDb...

Вы можете захватить v. 1.1, используя консоль диспетчера пакетов NuGet внутри Visual Studio:

Install-Package Microsoft.AspNet.Providers.Core -Version 1.1

В связи с этой проблемой возникла ошибка Microsoft Connect:

Microsoft.AspNet.Providers.Core несовместим с EF6

Ответ 5

Мне удалось решить эту проблему, удалив поставщиков AspNet, которые я установил через Nuget, который был отмечен как устаревший. Это также удалил Entity Framework.

Затем я установил новые AspNet Universal Providers, а затем Entity Framework 6, и все мои проблемы были исправлены.

Ответ 6

Проверить эту ссылку

http://visualstudiomagazine.com/articles/2014/03/01/whats-new-in-entity-framework-6.aspx

Я обновил EF 6.2 и получил ту же ошибку и нашел решение как запасы

Измените пространство имен System.Data.Entity на System.Data.Entity.Core, включая любые ссылки на пространства имен System.Data. * (например, System.Data.Objects становится System.Data.Entity.Core.Objects).

Ответ 7

Это происходит, когда инфраструктура сущности не может найти метод в библиотеке инфраструктуры dotnet, установленной на компьютере. Поэтому установите dotnet framework 4.5.2 или выше. Это устранит проблему.

Ответ 8

Что сработало для меня, было следующее:

  • Установите dll 'Microsoft.AspNet.DataSource' с помощью

    PM > Install-Package Microsoft.AspNet.EntityDataSource

  • Ссылка "Microsoft.AspNet.DataSource.dll" в вашем проекте.

  • Добавлены следующие объявления:

    используя System.Data.Entity.Core.Metadata.Edm;

    с использованием System.Data.Entity.Core.Objects;

    с использованием Microsoft.AspNet.EntityDataSource;

  • Удалены следующие объявления:

    с использованием System.Data.Entity;

    используя System.Data.Metadata.Edm;

    с использованием System.Data.Objects;

    используя System.Web.UI.WebControls;

Voila, код компилируется и работает.

Ответ 9

Для этого есть старая версия, связанная с файлом edmx:

  • Переустановите EF с помощью Nuget
  • Удалите файл .edmx и заново создайте его с помощью таблиц

Ответ 10

Быстрое и простое решение для меня заключалось в том, чтобы удалить оскорбительные сборки (устаревшие) и добавить ссылку на новую библиотеку. Код был изменен в Context.tt и выглядит следующим образом:

if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects; // The assembly you need
using System.Linq;
<#
}

Перед любыми изменениями он появился как таковой:

if (container.FunctionImports.Any())
{
#>
using System.Data.Objects; // Error on compile
using System.Data.Objects.DataClasses; // Error on compile
using System.Linq;
<#