【问题标题】:ASP.net working with entitiesASP.net 与实体一起工作
【发布时间】: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 =&gt; m.FirstName)Html.TextBoxFor(m =&gt; m.FirstName),这将自动为您生成一个labelFirstName 和一个textbox

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

您不必必须创建所有模型的副本。事实上,如果它们只不过是不增加任何价值的复写本,那么你真的不应该制作它们。

几乎任何 C# 类都可以是绑定到视图的模型。如果您的实体框架模型符合视图的业务需求,那么在两者之间添加翻译层几乎没有价值。

开发人员经常有个人偏好,希望将数据库模型和应用程序模型分开。这种分离的客观需求取决于正在构建的系统的架构。 (此问题中没有详细描述。)

相反,同样有一个论点是由一组无依赖的业务模型组成,这些业务模型在应用程序的每一层都使用。这方面通常是通过提出问题来提出的……如果你的用例(用户在视图中所做的事情)与你的系统架构不相符,不应该改变后者以更好地促进前者吗?

简而言之,您当然可以为应用程序的不同层创建不同模型分类之间的硬性分隔线。但是你是否应该是一个更大的问题。如果在您的情况下这样做会产生额外的工作和额外的复杂性没有任何额外价值,那么这似乎表明它没有必要。

【讨论】:

  • 解释得很好!
猜你喜欢
  • 2011-04-17
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多