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

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

Установленная визуальная студия 11 beta, как хотелось протестировать бета-версию EF 5, но продолжайте эту ошибку.

Метод не найден: 'Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior (Boolean)'.

Проект представляет собой новое пустое приложение 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, но ничего не получилось, и я не совсем уверен, к какой ошибке относится. Я добавил фрагмент stacktrace ниже, если это поможет.

[MissingMethodException: метод не найден: "Пустота 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(Тип entityType) +39
System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +137
System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() +38 System.Data.Entity.Internal.Linq.InternalSet 1.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

4b9b3361

Ответ 1

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

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

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

Update:

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

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

Ответ 2

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

Ответ 3

Если вам не удается избавиться от 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

Ответ 4

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

C:\Windows\Microsoft.NET\сборка\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" ...

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