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

时间:2013-07-09 00:22:28

标签: c# asp.net-mvc visual-studio entity-framework asp.net-mvc-4

我使用模型中的Entity Framework 5创建了一个数据库。 这个模型有一个名为'Person'的表,另一个叫做'Administrator'。 '管理员'继承自'人'。

  • '人'有一个ID和一个名字。
  • '管理员'有代码。

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

错误2 - 无法在“Model.Administrator”中隐式转换“Model.Person”类型。存在显式转换(您是否错过了演员?)。

错误代码(在ASTERISKS之间):

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

3 个答案:

答案 0 :(得分:5)

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

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

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

这两种解决方案都可行。

答案 1 :(得分:1)

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

此外 - 如果没有记录,您需要使用SingleOrDefault()扩展方法来返回null。如果您只使用Single()并且没有记录,则会抛出异常。

答案 2 :(得分:0)

  

'管理员'继承自'人'“

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

你可以

Person p = new Administrator();

但是

Administrator a = new Person();

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