将多个表组合成自定义视图模型
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 仅使用一个控制器和模型写入众多数据库中的每一个。
这里先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 仅使用一个控制器和模型写入众多数据库中的每一个。