【问题标题】:How can I handle derived types in Entity Framework 5 Code First and MVC?如何在 Entity Framework 5 Code First 和 MVC 中处理派生类型?
【发布时间】:2013-04-09 09:43:33
【问题描述】:

我正在研究一组类来表示实体框架中的资产注册。为了让问题保持简单,我构建了三个类:

资产

包含适用于所有资产类型的字段,例如资产 ID、序列号、购买日期

计算机

从资产派生,添加特定于计算机资产的字段,例如MAC 地址、主机名

监控

从资产派生,添加特定于监控资产的字段,例如尺寸


在纯 C# 中,我可以通过调用来实例化这些类,例如:

Computer DansComputer = new Computer(){ AssetID=12345, SerialNumber="12345", Hostname="DanComputer"};

我用于捕获新资产的 UI 要求用户输入有关其新资产(来自资产)类的基本数据,然后区分,例如,他们正在创建计算机资产。我想知道这是否不够优雅......在目前的形式中,执行插入的伪代码,无论资产类型如何:

  1. 捕获有关资产类的数据
  2. 通过 EF 将这些数据提交到资产表
  3. 根据资产类型重定向到视图,以捕获特定于类型的数据,例如新的计算机视图
  4. 检索先前提交的资产,将其转换为适当的类型(例如计算机)并将计算机特定的字段投影到新对象。
  5. 将计算机提交到数据库。

我不喜欢那里的视图之间的提交。

用户选择他们希望添加的资产类型(例如计算机、打印机)然后显示用于创建新计算机/打印机的视图是否是一种“有效”方法?这个解决方案对我来说听起来不太理想,因为:

  1. 我需要为每种资产类型绘制一个 MVC 视图,这对我来说似乎违反了 DRY 原则...
  2. 我需要手动保留所有可能的资产类型的列表并显示某种 UI 以允许用户选择他们想要使用的类型。

但是,我想不出任何其他方法来制作这个 UI。

我在这里遗漏了一些非常明显的东西吗?

【问题讨论】:

    标签: asp.net-mvc entity-framework ef-code-first


    【解决方案1】:

    我认为最简单的方法是改变你的步骤:

    1. 给用户一个选择:它是什么资产
    2. 修改为此资产采取适当的行动
    3. 使用资产的公共部分渲染视图(例如使用局部视图)并为选定的部分指定
    4. 检索数据并将其提交到数据库。

    【讨论】:

    • 谢谢@Garath。所以我只是实例化并提交一个计算机实例?例如,如果我有一个基于 ComputerViewModel 的 NewComputer 视图,并且我渲染了一个我假设将基于 AssetViewModel 的 Asset 部分视图,MVC 将如何处理回发?知道 NewComputer 视图导致回发并能够将 AssetViewModel 中的字段映射到 ComputerViewModel 中的相应属性上是否足够聪明?我需要从 AssetViewModel 派生 ComputerViewModel 吗?这对我来说完全陌生!
    • 您必须从 AssetViewModel 到 ComputerViewModel 并将模型传递给局部视图。
    • 我会试一试,让你知道我的进展如何!谢谢你。如果可行,我会将您标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多