在 MVC 5 和 EF 6.1 中,我使用简单的继承层次结构,其中 Student 类继承自 Person 类。对于这两个类,我的数据库上下文中有一个实体集(DbSet 属性):
public class DatabaseContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<Student> Students { get; set; }
}
现在,当我要求脚手架为子类 Student 生成 Controller 时,它使用 Persons 实体集,导致诸如这样的语句
Student student = db.Persons.Find(id);
编译器显然提示它不能将任何 Person 转换为 Student。
有没有办法确保脚手架使用正确的实体集(在本例中为学生)?
请注意,删除 Persons 实体集并不是一个好的解决方案,因为还有其他 Controller 需要它。
最佳答案
使用查找和替换将父 DBSet 的 Controller 类中的所有匹配项更改为子 DBSet,例如将 Persons 更改为 Students。
正如您可能知道的那样(我认为您提出了这一点)Microsoft 已确认这是一个已知错误 http://connect.microsoft.com/VisualStudio/feedbackdetail/view/945937/mvc-5-scaffolding-with-inheritance-uses-the-wrong-entity-set但他们不会修复它。
关于asp.net-mvc - 带有继承的 MVC 5 脚手架使用了错误的实体集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075655/