.Net MVC实体和ViewModels ......相同还是分开?

时间:2014-10-02 08:45:33

标签: 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最好是保持实体和我的视图之间的分离,并且复制我需要的字段的“逻辑”将在控制器中。但我的另一部分认为创建ViewModel只是实体的近似副本所以似乎浪费时间?

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

1 个答案:

答案 0 :(得分:3)

Viewmodel是最佳解决方案。

  1. 您可以输入属性(验证和其他)
  2. 您的viewmodel可以包含来自多个数据实体的数据
  3. 正如您所说,实体和视图之间存在分离
  4. 一般方法获取控制器中的实体并使用一些映射器库(我推荐emit mapper) 将实体映射到您的viewmodel