【发布时间】:2017-03-15 11:53:08
【问题描述】:
我对在 asp.net mvc 概念中使用实体存在某种误解。
我对 asp.net mvc 很陌生,当我学习时,有人告诉我,每当我使用数据库时,我都必须创建一个模型,该模型将是 EF 生成的副本。并发送到视图和所有计算都使用该模型完成..
例如,如果我的实体 Person 具有以下内容:
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }
我必须在我的模型文件夹中生成类 (EmployeeViewModel):
public class EmployeeViewModel
{
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }
}
在我的控制器中,我通常会做这样的事情来从数据库中获取有关一名员工的数据到我的模型(如果是员工列表,则类似):
var Employee = db.Employees.Where(item => item.EmployeeId == someId).Select(item => new EmployeeViewModel
{
EmployeeId = item.EmployeeId ,
FirstName = item.FirstName ,
LastName = item.LastName ,
DateOfBirth = item.DateOfBirth
}).FirstOrDefault();
此代码有效,但使用此自定义模型(只是实体的副本)的概念似乎很奇怪。我知道,如果我们的自定义模型与实体不同,创建自定义模型的概念很有用.
所以无论如何我都必须这样做,或者在某些情况下我可以直接使用实体。如果你能推荐一些文章或其他东西来了解这个想法,我会很高兴,我如何在我的 mvc 项目中使用数据库,因为它在其原始概念的意义上是正确的。
【问题讨论】:
-
What is ViewModel in MVC? (并注意它们应该在一个单独的文件夹中(比如
ViewModels)而不是你的Models文件夹) -
只要可行,您可以按照自己喜欢的方式进行操作。但是,这样做是最佳实践,并允许您使用更多功能。例如,如果您创建一个
View并通过@model EmployeeViewModel,您可以简单地使用Html.LabelFor(m => m.FirstName)和Html.TextBoxFor(m => m.FirstName),这将自动为您生成一个label和FirstName和一个textbox。
标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4