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)) {}
Это работало хорошо, прежде чем не было уверенности, почему это порождает эту ошибку. Любые предложения?
Ответы
Ответ 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
Ответ 4
Новая версия 2.0 поставщиков (http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/) совместима с EF6 (они будут работать только с 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;
<#