c# - .Net MVC 实体和 ViewModel...相同还是独立?

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

我是 ASP.NET MVC 新手,我已经使用 Entity Framework 代码优先方法创建了一个项目。我已将 POCO 对象放入一个名为 Entities 的单独类库中。

现在我想从我的服务类获取一些数据,它返回一个实体并将其输出到 View 。这是一些非常基本的代码

// in POCO library
public class MyEntity() {
    public int Id { get; set; }
    public String Name { get; set; }
}

// in service library
public class EntityService() {
    public MyEntity Get(int id) {
        return new MyEntity() { Id=1, Name="This is my entity name" };
    }
}

// controller in asp.net MVC web application
public MyController() : Controller
{
    private EntityService _service;

    public MyController(EntityService service) {
        _service = service;        
    }

    public ActionResult Index()
    {
        MyEntity entity = _service.Get(1);
        return View(entity);
    }
}

现在我应该将 MyEntity 推送到 View ,还是应该创建一个单独的 ViewModel?我的一部分认为,创建一个单独的 ViewModel 最好是保持实体和我的 View 之间的分离,并且复制我需要的字段的“逻辑”将位于 Controller 中。但我的另一部分认为创建 ViewModel 只是实体的近乎副本,所以看起来像是浪费时间?

我想正确地做到这一点,所以我想在这里问。提前致谢

最佳答案

Viewmodel 是最好的解决方案。

  1. 您可以添加属性(验证和其他)
  2. 您的 View 模型可以包含来自多个数据实体的数据
  3. 正如您所说,实体和 View 之间是分离的

一般方法在 Controller 中获取实体并使用一些映射器库(我推荐 emit mapper ) 将实体映射到您的 View 模型

关于c# - .Net MVC 实体和 ViewModel...相同还是独立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157284/

相关文章:

c# - 使用 DbContext Set<T>() 而不是在上下文中公开

c# - 圆形按钮

c# - Asp.Net vNext 在现有应用程序中自托管

c# - 通过ajax请求获取剩余 session 时间而不更新 session

c# - EF linq skip/take 在哪里执行?

c# - 使用 Entity Framework 将文件保存在数据库中

c# - C#.Net 中的清除密码文本框

c# - 将表附加到字符串

asp.net-mvc - Default.aspx 未在 ASP.NET 项目中使用 MVC 部分执行

javascript - AJAX 成功时未接收数据,结果显示为 "undefined"