我试图了解整个 MVC/EF 关系。如果我创建一个仅与数据库交互的实体模型(因为您不应该将实体模型传递给视图),然后是模型的类,最后是视图模型,如下所示。我唯一的问题是拥有第二个类似乎是多余的,我所看到的示例中唯一的不同是它们将数据注释应用于该类,因为它与视图交互。为什么确保实体对象不暴露在视图层如此重要?
我还没有真正开始编写项目,但我假设您将使用实体模型与数据库进行交互,然后将其转换为 ProductModel 以传递给视图这是正确的逻辑吗?
实体模型:
public class Product
{
[Key()]
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
}
模型:
public class ProductModel
{
public int ID { get; set; }
[StringLength(50)]
[Required(ErrorMessage = "Product Name is required.")]
[Display(Name = "Product Name")]
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
}
视图模型:
public class ProductViewModel
{
Product myProduct { get; set; }\
//Plus any other properties I may need for the view.
}
更新:
在我一直在阅读的示例中,他们还设置了如下 DBContext。那么 ProductModel 类就没有用了吗?
public class MyAppContext : DbContext
{
public MyAppContext()
: base("name=DBConnection")
{
}
public DbSet<Product> Products { get; set; }
}