我使用模型中的Entity Framework 5创建了一个数据库。 这个模型有一个名为'Person'的表,另一个叫做'Administrator'。 '管理员'继承自'人'。
为“管理员”创建新的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);
}
答案 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();
不正确,你需要进行演员表。