MVC4实体框架-无法隐式转换

本文关键字:转换 实体 框架 MVC4 | 更新日期: 2023-09-27 18:21:39

我使用实体框架5从模型创建了一个数据库。这个模型有一个名为"Person"的表和另一个名"Administrator"的表。"Administrator"继承自"Person"。

  • "Person"有一个Id和一个Name
  • "管理员"具有代码

为"管理员"创建新控制器时使用MVC4。当我创建控制器&自动查看这是错误:

错误2-无法隐式转换"Model.Administrator"中的类型"Model.Person"。存在显式转换(是否缺少强制转换?)。

错误代码(星号之间):

public ActionResult Details(int id = 0)
    {
        **Administrator admin = db.Person.Single(u => u.Id == id);**
        if (admin == null)
        {
            return HttpNotFound();
        }
        return View(admin);
    }

MVC4实体框架-无法隐式转换

Administrator a = db.Person.OfType<Administrator>().Single(u => u.Id == id);

使用仅返回可强制转换为该类型的对象的OfType<>()筛选器方法。或者显式强制转换对象。

Administrator a = db.Person.Single(u => u.Id == id) as Administrator;

这两种解决方案都会奏效。

即使在MVC 5.1中,脚手架生成也不知道如何处理继承的类型。您必须使用OfType<>()按对象类型进行筛选的方法,如bmused所述。

此外,如果没有记录,则需要使用SingleOrDefault()扩展方法才能返回null。如果只使用Single(),并且没有记录,则会引发异常。

"Administrator"继承自"Person"

这意味着"管理员"是"个人",但"个人"可能不是"管理员"

你可以有

Person p = new Administrator();

但是

Administrator a = new Person();

是不正确的,您需要进行强制转换。