Кто-нибудь может понять, почему я продолжаю получать эту ошибку при тестировании бета-версии EF 5?

Установил бета-версию Visual Studio 11, так как хотел протестировать бета-версию EF 5, но продолжает выдавать ошибку.

Метод не найден: «Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (логическое значение)».

Project — это новое пустое приложение MVC3, и ниже приведен код, иллюстрирующий возникновение ошибки.

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class EFDbContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
}

public class HomeController : Controller
{
    protected EFDbContext Db = new EFDbContext();

    public ActionResult Index()
    {
        Blog B = new Blog();
        B.Name = "Test";            
        Db.Blogs.Add(B);
        Db.SaveChanges();
        return View();
    }
}

Искал ошибку в google, но ничего не вышло, и я не совсем уверен, о какой ошибке идет речь. Я добавил фрагмент трассировки стека ниже на случай, если это поможет.

[MissingMethodException: метод не найден: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)'.] System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +0 System.Data.Entity.Internal.InternalContext.Initialize () +31
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39
System.Data.Entity.Internal.Linq.InternalSet1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() +38 System.Data.Entity. Internal.Linq.InternalSet1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) +236
System.Data.Entity.Internal.Linq.InternalSet
1.Add(сущность объекта) +200 System.Data.Entity.DbSet`1.Add(сущность TEntity) +72


person Drauka    schedule 06.03.2012    source источник


Ответы (4)


Похоже, вы используете EF5 EntityFramework.dll, но затем работаете с установленной .NET 4 вместо .NET 4.5.

Если вы собираетесь работать с .NET 4.5, убедитесь, что .NET 4.5 установлен на компьютере, на котором выполняется код. VS11 устанавливает для вас .NET 4.5, но вы также можете установить только среду выполнения на машине, не являющейся разработчиком.

Если вы собираетесь ориентироваться на .NET 4, убедитесь, что ваш проект настроен на .NET 4, а затем удалите и переустановите пакет NuGet EF5. Вы должны удалить и переустановить, так как NuGet не изменит используемую сборку автоматически, когда проект будет перенацелен.

Обновление:

Вы также можете увидеть это исключение, если у вас все еще установлена ​​июньская CTP-версия EF или если ее не удалось правильно удалить. Пожалуйста, попробуйте полностью удалить июньскую CTP перед установкой VS11. Если вы все еще видите проблемы, откройте «Командную строку разработчика» от имени администратора и запустите:

gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089

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

gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
person Arthur Vickers    schedule 07.03.2012
comment
Оцените ответ. Однако у меня установлен .Net 4.5, и мой проект также ориентирован на платформу .net 4.5. Я пытался запустить бета-версию EF 5.0 в VS 11 Ultimate Beta с платформой .Net 4.5 Beta. Я попытаюсь удалить VS11 и .Net 4.5 framework и начать заново. - person Drauka; 08.03.2012
comment
Удалил бета-версию vs11 и фреймворк 4.5 и переустановил бета-версию vs11, включая 4.5.... Проблема не устранена, и я получаю ту же ошибку. - person Drauka; 08.03.2012
comment
Можете ли вы найти версию файла System.Data.Entity.dll в GAC? В проводнике Windows откройте папку C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089 или аналогичную на вашем компьютере. Щелкните правой кнопкой мыши System.Data.Entity.dll, выберите вкладку «Сведения» и посмотрите версию продукта. Если это 4.0.30319.17379, значит у вас установлен .NET 4.5. Если это 4.0.30319.1, то у вас каким-то образом все еще установлен .NET 4. - person Arthur Vickers; 08.03.2012
comment
На самом деле у меня есть 2 папки в разделе «system.data.entity» 1. C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.0.0.0__b77a5c561934e089 2. C:\Windows\Microsoft. NET\assembly\GAC_MSIL\System.Data.Entity\v4.0_4.2.0.0__b77a5c561934e089 dll в папке 1. имеет версию продукта: 4.0.30319.17379 dll в папке 2. имеет версию продукта: 4.0.30319.0 Пытался удалить папку 2, но это вызывает ошибку, и, честно говоря, у меня нет большого опыта работы с такими DLL, поэтому любые дальнейшие советы очень ценятся. - person Drauka; 08.03.2012
comment
Установили ли вы сейчас или когда-либо EF June CTP на этой машине? Если это так, убедитесь, что он полностью удален и что ваш проект нацелен на .NET 4.5, а не на CTP-версию Microsoft Entity Framework за июнь 2011 г. Вам также может потребоваться переустановить VS снова после удаления CTP. - person Arthur Vickers; 08.03.2012
comment
У меня была установлена ​​июньская CTP, но я удалил ее до того, как сегодня установил бета-версию vs11. - person Drauka; 08.03.2012
comment
Если эта сборка находится в GAC, значит, она не была удалена полностью. Можете ли вы открыть командную строку разработчика от имени администратора и запустить gacutil -l System.Data.Entity, а затем сообщить мне, что она сообщает? - person Arthur Vickers; 08.03.2012
comment
сообщает, что у него есть 3 элемента: версия=3.5.0.0 версия=4.0.0.0 версия=4.2.0.0 - person Drauka; 08.03.2012
comment
Можете ли вы попробовать запустить gacutil /u System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 из командной строки разработчика от имени администратора? Если это не сработает, попробуйте gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089. - person Arthur Vickers; 08.03.2012
comment
успех... удаление фреймворка из JUNE CTP сработало. Просто хотелось бы, чтобы это сработало из коробки, когда я удалил его: s Большое спасибо за вашу помощь. - person Drauka; 08.03.2012
comment
Это все еще соответствует данным? Попал сюда, погуглив эту ошибку, которую я получил после загрузки моего проекта. При использовании VS Express 2012 для Интернета и выборе файла => новый проект => приложение mvc 3 (установка для .net framework версии 4, а не 4.5). После создания проекта есть файл EntityFramework.dll. Щелкните правой кнопкой мыши этот файл => свойства => детали, чтобы получить версию продукта 5.0.0 .net 4.0). Предполагается, что EF 5 может работать с .net 4. - person HMR; 09.04.2013

Убедитесь, что в вашей целевой системе установлен .net 4.5. У меня было такое же сообщение, оказалось, что на одном из серверов моей фермы не установлен .net 4.5.

person ddd    schedule 06.12.2012

Если у вас возникли проблемы с удалением 4.2 System.Data.Entity из GAC, как я сделал, где он жаловался, что установщик зависит от него,

G:\Program Files (x86)\Microsoft Visual Studio 2012 Ultimate\VC>gacutil /uf System.Data.Entity,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.


Assembly: System.Data.Entity, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b
77a5c561934e089, processorArchitecture=MSIL
Assembly could not be uninstalled because it is required by Windows Installer
Number of assemblies uninstalled = 0
Number of failures = 0

вы можете избавиться от ключей в реестре из этой папки:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Assemblies\Global

и повторно запустите команду gacutil /uf

person aggaton    schedule 19.12.2012

Я решил эту проблему, удалив политику:

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\policy.4.0.system.data.entity\v4.0_0.0.0.0__b77a5c561934e089\policy.4.0.system.data.entity.config

У которого была эта информация: ... bindingRedirect oldVersion = "4.0.0.0" newVersion = "4.2.0.0" ...

Надеюсь, это поможет Руи

person rsantos    schedule 17.10.2013