2015-06-27 38 views
1

第一篇文章在这里。我对编程非常陌生,并且我是MVC和实体框架的新成员。我有一个问题,涉及到很多细节和我试过的很多代码,但在我把所有这些都放下之前,我想我会问一个问题,看看我是否从右边接近问题范例。将多个表格组合成自定义视图模型

我工作的一个项目,其中我的团队与一个MVC的Web应用程序替代基于接入的桌面应用程序。我们有一个与多个其他表有一对多关系的父表,并且我们已经将该模式作为mdf文件引入到我们的项目中,并且迄今为止都试图首先执行这个数据库。主表的

的主键,也就是说,客户ID。所有的子表都有CustomerID作为外键。该应用程序需要做的是显示来自所有不同表格中的选定单元格的数据。

我试图攻击这个的方式是我创建了一个模型类,其中只包含需要显示的列,然后在控制器中查询数据库的CustomerID上的一系列左外连接,选择我想要的列,然后填充我在select子句中创建的自定义模型的单个实例。然后我将该模型传递给View。

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

+0

这听起来似乎是合理的显示视图。对于创建或更新视图,您将需要包含子集合的不同模型。如果您使用EF,则不需要连接 - 您可以使用包含语法热切地获取所需内容:_context.Customers.Include(c => c.Invoices).Include(c => c.Addresses)等等可以使用像Automapper这样的工具将实体数据移动到模型中。 –

+0

谢谢@Steve!我很欣赏这个快速评论。包括看起来会有帮助,并感谢关于创建和查看不同模型的头像。 –

+0

虽然它不是一般的最佳实践,但您可以将实体类与所有“Include”直接传递给您的视图。对于CRUD应用程序来说,它将工作得很好 – ranquild

回答

0

我不知道这是否是去了解它的最佳方式,但我结束了创建由每个我需要借鉴的数据表的表的典范。

所以 public class MasterModel { public List Names {get;组; } public List Emails {get;组; } public List Phones {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) 
} 

代码,并且得到一个页面上显示我的数据。

这样的问题是“解决”。

但它确实让我如何使用这个同样的方法/模型写信给各只使用一个控制器和模型的许多数据库的新问题。

相关问题