我正在开发一个 MVC Web 应用程序。我只是想知道是 M、域模型还是 poco 类,或者它是精制和处理过的数据准备发送到 View 进行显示?

例如考虑一个数据库表:

Id, Name, Salary

要显示,我需要 4 列而不是 3 列:
Id, Name, Salary, Annual Salary (Salary * 12)

根据模式指南,我对 Model 类中的内容感到困惑,我会在 Controller 中执行 AnnualSalary=Salary*12 并将所有 4 条数据传递给查看,还是我的 Model 将返回 4 列?

另一点是,如果我需要从具有这 4 列的其他表中添加地址,模型应该返回精炼和所需的数据还是在 Controller 中我应该查询 2 个不同的数据表并进一步选择并将数据传递给 View ?

最佳答案

ASP.NET MVC 上的一个好的做法是将模型与数据库和 View 模型分开。
在您的情况下,我们将有两个模型:EmployeeDTO 和 Employee。

public class EmployeeDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Salary { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Salary { get; set; }
    public int AnnualSalary { get { return this.Salary * 12; } }
}

之后,在您的 Controller 上,您将 EmployeeDTO 映射到 Employee(读取操作),将 Employee 映射到 EmployeeDTO(创建/更新操作)。
例如,一个 Read 方法:
public ActionResult Read(int id)
{
    EmployeeDTO employeeDTO = db.Employee.Find(id);
    Employee employee = new Employee()
    {
        Id = employeeDTO.Id,
        Name = employeeDTO.Name,
        Salary = employeeDTO.Salary
    };
    return View(employee);
}

使用这种方法,您可以为 EmployeeDTO 实现 DataAnnotations,它不会自动应用于 Employee(因此适用于您的 View ),反之亦然。
在您的情况下,您可以添加一个不影响数据库架构的新属性。

希望能帮助到你。

10-07 19:43
查看更多