2

我使用模型中的实体框架 5 创建了一个数据库。该模型有一个名为“Person”的表和另一个名为“Administrator”的表。“管理员”继承自“人员”。

  • 'Person' 有一个 ID 和一个名称。
  • “管理员”有代码。

当我为“管理员”创建新控制器时使用 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);
    }
4

3 回答 3

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

使用OfType<>()仅返回可转换为该类型的对象的过滤器方法。或者,也可以显式地转换对象。

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

这两种解决方案都可以。

于 2013-07-09T00:24:55.400 回答
1

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

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

于 2014-02-28T03:00:45.093 回答
0

'Administrator' 继承自 'Person'"

这意味着“管理员”是“人”,但“人”可能不是“管理员”

你可以有

Person p = new Administrator();

Administrator a = new Person();

不正确,您需要进行演员表。

于 2013-07-09T04:17:12.060 回答