将多个表组合成自定义视图模型

Combining multiple tables into a custom view model

这里先post。我是编程新手,也是 MVC 和 entity framework 的新手。我有一个问题涉及很多细节和我尝试过的大量代码,但在我放下所有这些之前,我想我会问一个问题,看看我是否从正确的角度解决问题范式。

我正在开展一个项目,我的团队正在用 MVC 网络应用程序替换基于 Access 的桌面应用程序。我们有一个单亲 table 与多个其他 table 存在一对多关系,我们已经将该模式作为 mdf 文件拉入我们的项目,并且到目前为止,我们正在尝试先执行这个东西数据库。

master table 的主键是 CustomerID。所有子 table 都将 CustomerID 作为外键。该应用程序需要做的是显示来自单个 CustomerID 的所有不同 table 的 selected 单元格的数据。

我试图解决这个问题的方法是,我创建了一个模型 class,它只包含我需要显示的列,然后在控制器中,我使用一系列左侧查询数据库外部连接 CustomerID 和 select 只是我想要的列,并填充我在 select 子句中创建的自定义模型的单个实例。然后我将该模型传递给视图。

基本问题,我知道,但这是最好的一般流程吗?或者我需要以不同的方式思考这个问题吗?

我不确定这是否是最好的方法,但我最终创建了一个模型,其中包含我需要从中提取数据的每个表的列表。

所以 public class 大师模型 { public 列出名称 { get;放; } public 列出电子邮件 {get;放; } public 列出电话 {get;放; } }

然后

public ActionResult Index(int id)
{
    MasterModel masterModel = new MasterModel();
    masterModel.Names = *query NamesTable where Names.id == id*
    masterModel.Emails = *query EmailsTable where Emails.id == id*
    masterModel.Phones = *query PhonesTable where Phones.id == id*

    return View(masterModel)
}

因此将 masterModel 传递给 index.cshtml,并且 index.cshtml 拉出 _NamesPartial.cshtml、_EmailsPartial.cshtml 和 _Phones.cshtml 的部分视图。这些部分中的每一个都有一个 IList 等类型的模型。

那么每个部分都有这样的代码

foreach (var item in Model)
{
    @Html.TextBox("FirstProp", item.FirstProp)
    @Html.TextBox("SecondProp", item.SecondProp)
}

这让我的所有数据都显示在一页上。

所以那个问题是'solved'。

但这确实给我留下了一个新问题,即如何使用相同的 method/model 仅使用一个控制器和模型写入众多数据库中的每一个。