Невозможно добавить контроллер

#c# #asp.net #asp.net-mvc #entity-framework #asp.net-mvc-4

#c# #asp.net #asp.net-mvc #entity-framework #asp.net-mvc-4

Вопрос:

Я новичок в разработке веб-приложений MVC. Я пытаюсь добавить контроллер после добавления моей модели и класса DbContext.

Но когда я пытаюсь использовать этот контроллер с помощью Entity framework, он выдает ошибку

 Unable to cast object of type 'System.Data.Entity.Core.Objects.ObjectContext' to 'System.Data.Objects.ObjectContext'
 

Я использую EF-6.1.1 (последнее обновление)

Ниже приведены мои модели и контекстный класс..

  public class EmpDetails
    {
        [Key]
        public int Id { get; set; }

        public string EmpId { get; set; }


        public string EmployeeName { get; set; }
    }


 public class ModelContext : DbContext
    {
        public DbSet<EmpDetails> Employee { get; set; }
    }
 

Когда я пытаюсь добавить контроллер, я получаю следующую ошибку.

введите описание изображения здесь

Пожалуйста, предложите какое-либо решение этой проблемы. что с этим не так..

вот процесс, посредством которого я добавляю контроллер

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. как вы пытаетесь добавить контроллер?

2. @ArijitMukherjee: Я обновил свой пост 2 изображениями.. пожалуйста, взгляните..

3. это не поддерживается ASP.NET Строительные леса MVC 4 не поддерживают Entity Framework 6 или более поздние версии

4. Я думаю, это связано с привязкой модели из-за DbContext и ObjectContext

5. игнорируйте scfolling Сообщение об ошибке говорит само за себя

Ответ №1:

Entity Framework внесла критические изменения между версиями 5 и 6. Для того, чтобы он стал полностью открытым исходным кодом, они переместили все библиотеки за пределы диапазона, и теперь все они полностью находятся в сборке EntityFramework в NuGet. Побочным эффектом этого стало то, что многие пространства имен для Entity Framework изменились:

Пространства имен для типов DbContext и Code First не изменились. Это означает, что для многих приложений, использующих EF 4.1 или более позднюю версию, вам не нужно будет ничего менять.

Типы, подобные ObjectContext, которые ранее были в System.Data.Entity.dll были перемещены в новые пространства имен. Это означает, что вам может потребоваться обновить директивы using или Import для сборки с EF6.

Общее правило для изменений пространства имен заключается в том, что любой тип в System.Data.* перемещается в System.Data.Entity.Core.* . Другими словами, просто вставьте Entity.Core. после System.Data . Например:

System.Data.EntityException => System.Data.Entity.Core.EntityException System.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext System.Data.Objects.Классы данных.RelationshipManager => System.Data.Entity.Core.Objects.Классы данных.RelationshipManager

Причина, по которой вы видите ошибку, заключается в том, что вы используете предыдущую версию MVC, которая была нацелена на более раннюю версию Entity Framework. Строительные леса будут использовать старые пространства имен.

Вы можете попробовать обновить MVC до последней версии, и ваши строительные леса снова заработают. Либо это, либо понизить EF6 (я не рекомендую это, у него много действительно замечательных функций). Третий вариант заключается в том, чтобы каждый раз вручную исправлять ваш скомпонованный код.

Ответ №2:

При использовании ASP.Net MVC 3/4, сборка Entity framework (.dll) будет автоматически ссылаться на более низкую версию (5.0.0.0). И когда вы обновляете это до более высокой версии, требуется явное преобразование типа, для которого вы получаете эту ошибку. один из способов исправить эту проблему — использовать существующую версию Entity Framework (5.0.0.0) без обновления до более высокой версии.