具有实体框架的MVC继承:如何构建派生类型?

时间:2015-06-02 12:36:04

标签: c# asp.net-mvc entity-framework web-applications

有人请指出 .net 示例代码的方向,派生类的控制器和视图......

(你可能会想到会有很多资源,我找不到......)

在项目中,我有一个派生自Abstract类的类,EF映射每个层次的表db,并且在运行时,DB看起来像预期的那样" UserTypeId" descriminator。

我已经克服了初始编译和运行时错误......

我尝试了基于派生类的脚手架,但这显然让控制器ActionResult需要像

这样的强制转换。
Parent parent = db.AbstractPersons.OfType<Parent>().Single(p => p.AbstractPersonId == id);

此外,Index视图中存在运行时错误,因此我使用

更新了视图
@model IList<BeyondThemes.BeyondAdmin.Models.CardCore.Parent>

然后模型没有正确渲染所需的属性。

似乎有很多人必须解决这个问题,但ContosoU示例(和其他人)都没有描述如何在创建继承层次结构后为模型构建控制器和视图。

我也有兴趣了解EF6是否以与抽象类相同的方式处理接口,并希望看到每种类型的表格(甚至是每个混凝土类的表格)。

最新的错误是 enter image description here

2 个答案:

答案 0 :(得分:0)

错误表明您传递的Model类型为IList<Parent>,但您将模型视为单个元素,而不是集合。如果您计划传递多个项目,则需要添加foreach语句来循环访问该集合。如果您想要单个项目,则需要将模型定义更改为仅采用单个项目(并将其从Controller传递到视图)。

答案 1 :(得分:0)

您从控制器传递的类型(Parent)与视图的模型(IList)不匹配