【问题标题】:MVC Inheritance with Entity Framework: How do I scaffold a derived type?实体框架的 MVC 继承:如何构建派生类型?
【发布时间】:2015-06-02 12:36:03
【问题描述】:

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

(你可能会想象会有很多资源,我没有找到任何......)

在项目中,我有一个派生自抽象类的类,EF 映射每个层次结构的表数据库,并且在运行时数据库看起来与“UserTypeId”描述符的预期一样。

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

我尝试基于派生类构建一个控制器,但这显然使控制器 ActionResult 需要像

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

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

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

那么模型没有正确渲染所需的属性。

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

我也很想知道 EF6 是否以与抽象类相同的方式处理接口,并且希望看到每个类型的表(甚至每个具体类的表)的示例。

最新的错误是

【问题讨论】:

  • 我不确定您的问题是什么。您已经“修复了编译和运行时错误”,并且还有其他一些“运行时错误”。你能更详细一点吗?究竟是什么不工作?
  • 感谢您回答我的问题...视图存在问题,因为模型没有任何属性。
  • 我添加了错误截图。

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


【解决方案1】:

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

【讨论】:

  • 我在视图的表的第二部分有 foreach 循环...问题出在 .DisplayNameFor()...我不明白为什么它适用于 IEnumberable(Model ) 而不是 IList ?
  • 问题是(只是)为表格的每一列创建标签并循环通过标题将给出重复的列标题。
  • 好的,我发现我可以在列表中使用 .first() ,例如 model => model.First().FirstName 或在控制器中返回 .asEnumerable() 。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2011-04-19
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多