C# MVC.NETC-从多个表获取视图

C# MVC.NETC-从多个表获取视图,c#,asp.net-mvc,C#,Asp.net Mvc,我有大约4个表,我喜欢从中收集信息,然后在视图中显示。根据我的理解,我需要在模型中创建一个类。在控制器中,我将调用该类。然后我将该类的一个实例传递给视图 但我不确定如何通过编程实现这一点。如果可以提供一些代码作为简单的示例。此外,我可能还需要编辑和删除视图中显示的记录 您是否已经启动并运行了数据访问层,或者您计划如何从数据库读取数据并将其发送到MVC应用程序 您计划使用SQL Server和实体框架还是什么 有关如何分层ASP.NET MVC应用程序的一般想法,请参见我的回答:事实上,这个回答不

我有大约4个表,我喜欢从中收集信息,然后在视图中显示。根据我的理解,我需要在模型中创建一个类。在控制器中,我将调用该类。然后我将该类的一个实例传递给视图


但我不确定如何通过编程实现这一点。如果可以提供一些代码作为简单的示例。此外,我可能还需要编辑和删除视图中显示的记录

您是否已经启动并运行了数据访问层,或者您计划如何从数据库读取数据并将其发送到MVC应用程序

您计划使用SQL Server和实体框架还是什么


有关如何分层ASP.NET MVC应用程序的一般想法,请参见我的回答:事实上,这个回答不仅适用于MVC,而且下面还有一些关于如何分割和分离各种关注点的评论。

我们大多数人都在使用类似nhibernate或entity framework的ORM来处理数据访问。如果映射工作正常,它将使所有内容都强类型化;加快了开发时间

您应该做的是获取具有数据访问层的表,并使用这些数据访问层用信息填充视图模型。比如:

public ActionResult Details(int id)
{
    var user = _nhibernate.Get<User>(id);
    var company = _nhibernate.Get<Company>(user.CompanyId);
    var model = new DetailsModel{
       CompanyName = company.Name,
       UserName = user.Name
    };
    return View(model);
}

我们将更容易知道哪些表显示了您希望在视图中呈现的内容中的名称、列和详细信息。@Polity:为什么有必要这样做?@jgauffin-我说的更简单,没有必要。根据他的问题,此人对ViewModels不是很熟悉。如果我们能给他一个背景中的例子,我想对他来说会更容易一些。我想问一个关于在我的场景中创建控制器的问题,我有很多表。顺便说一下,我们确实使用.edmx。为了创建模型,我所做的是转到model文件夹并创建一个具有以下内容的模型:公共类modelvices{public IEnumerable Trucktbl{get;set;}public IEnumerable Cartbl{get;set;}},其中Trucktbl和Cartbl是表的名称。但我确实在IEnumerable下找到了一条摇摆线,上面写着找不到名称IsEnumerable。。我的第一个目标是为创建controllerMy示例获取来自两个不同表的信息,并将该信息添加到视图模型中,然后视图使用该模型。没有任何规定必须使用一条SELECT语句从所有四个表中获取信息。在模型DetailsModel中,表的名称CompanyName和UserName在哪里?如果没有,您如何在模型类中指定表?我不明白您想做什么_nhibernate.Getuser.CompanyId从公司表和_nhibernate.Getid获取信息;从用户表中获取信息。实体框架edmx以类似的方式工作感谢您的回复。所做的是将表添加到我的.edmx文件中。接下来,我开始创建一个控制器。对于脚手架选项,我选择了具有读/写操作的控制器。对于模型类,我确实看到了我在下拉列表中添加的各个表,但我应该选择哪一个?您好,我们使用的是.edmx文件。我已将所需的表添加到.edmx文件中。我开始创建控制器,但下拉列表中的一个选项是Model类。我确实看到了我添加到下拉列表中的表,但不确定要选择哪一个,因为它们都是不同的表。不确定如何为我的案例选择合并模型。请参阅上面我的链接答案。您首先需要创建一个BL和一个DAL,这样您的UIMVC应用程序就不会直接和edmx通信。当然,这是一种最受欢迎或建议的方法,它通过让UI只做UI而不依赖DAL和EF来获得回报。
public class DetailsModel
{
    public string CompanyName { get; set; }
    public string UserName { get; set; }
}