【问题标题】:Get data from connected 2 table从已连接的 2 个表中获取数据
【发布时间】:2019-01-21 10:03:10
【问题描述】:

我使用 ado net 实体数据模型从现有数据库创建了 2 个数据模型。这些表相互关联。第一个表是类别表,第二个表是产品。所以每个品类都有很多产品。我想在视图中显示某些类别的列以及同一类别中相同的产品。我对这个简单的结构感到困惑。我离开 mvc 有一段时间了。我需要解决这个问题。请帮忙。

【问题讨论】:

标签: sql-server asp.net-mvc entity-framework model-view-controller


【解决方案1】:

您需要使用视图模型。视图模型与 MV* 架构模式相关,用于将数据传递到视图或从视图传递数据。我将尝试用简单的术语来解释它。假设您有两个表:

员工

---------------------------------------
| Id | Name       | Designation       |
---------------------------------------
| 1  | John Doe   | Software Engineer |
---------------------------------------
| 2  | John Smith | Test Engineer     |
---------------------------------------

工资

----------------------------------------
| Id  | EmployeeId  | EmployeeSalary   |
----------------------------------------
| 1   | 1           | $10,000          |
----------------------------------------
| 2   | 2           | $10,000          |
----------------------------------------

现在要在您的代码中访问这两个表,您已经使用 ORM 创建了数据实体,它将创建两个类:

Employee.cs

public class Employee
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Designation { get; set; }
}

Salary.cs

public class Salary
{
    public int Id { get; set; }

    public int EmployeeId { get; set; }

    public long EmployeeSalary { get; set; }
}

现在要使用这两个模型在 UI 上表示有意义的数据,您可以创建一个包含所有必要数据实体的 ViewModel 并将其通过控制器传递给视图:

EmployeeViewModel.cs

public class EmployeeViewModel
{
    public Employee EmployeeDetail { get; set; }

    public Salary EmployeeSalaryDetail { get; set; }
}

员工控制器:

public class EmployeeController 
{
    public ActionResult Index()
    {
        var model = new EmployeeViewModel();
        return View(model);
    }
}

对于数据实体和视图模型之间的显着差异,请检查此; Is it possible to create view models by out of models created from database tables using entity framework DB first approach?

【讨论】:

  • 感谢您的回复。我按照您的描述创建了一个视图模型。接下来我像@model Project.Models.MyViewModel 一样在我的视图中调用。然后我试图访问像@Html.DisplayFor(model => model.Employee.name) 这样的数据。但我一无所获。我做错了吗?
  • 不是@Html.DisplayFor(model => model.Employee.name),应该是@Html.DisplayFor(model => model.EmployeeDetail.Name )
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2012-12-11
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多