2014-10-02 57 views
1

我是新来的asp.net MVC和我已经创建了一个项目使用实体框架代码的第一种方法。我已将POCO对象放入一个名为实体的单独类库中。.Net MVC实体和视图模型...相同或独立?

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

// 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所推的视图,或者我应该要创建一个独立的视图模型?我的一部分人认为,创建一个单独的ViewModel将是最好的,以保持实体和我的视图之间的分离,并且还需要在控制器中复制我需要的字段的“逻辑”。但我的另一部分认为,创建一个ViewModel只是实体的一个近似副本,所以看起来像浪费时间?

我想正确地做,所以我想在这里问。在此先感谢

+0

创建单独的视图模型。在映射不是一对一之前不会很久。另外请记住,如果您直接绑定到实体,则任何用户都可以通过提交正确的POST值来更改任何属性。 – 2014-10-02 08:52:39

+0

[This SO answer](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)给出了一些很好的理由,为什么视图模型是一个很好的方法。另外[this](http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx)和[this](http://www.mikesdotnetting。 com/Article/188/View-Model-Design-and-Use-In-Razor-Views) – 2014-10-02 08:52:41

回答

3

Viewmodel是最佳解决方案。

  1. 你可以把
  2. 您的视图模型可以从几个数据实体包含数据属性(验证等)
  3. 正如你说你的实体和视图之间的分离

一般方法得到控制器中的实体并使用一些映射库(我建议使用emit mapper) 将实体映射到您的视图模型

+0

谢谢cosset,ant P和Stephen M的答案。所有的说法都一样,所以这样做! – Gillardo 2014-10-02 09:08:29