#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) без обновления до более высокой версии.