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);
}
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();
是不正确的,您需要进行强制转换。