如果我使用EF和Viewmodels,是否需要创建DTO?

时间:2015-08-06 19:37:12

标签: c# entity-framework model-view-controller

我已经读过Entity Framework(我使用的是EF6)是数据库的抽象。我正在使用viewmodels将数据提供给我的视图,因此EF实体不会通过我的控制器。我正在使用带有linq查询的存储库来获取数据。在控制器中,我实例化repo并获取数据。

那么有没有理由为控制器和repo之间的事务创建一个专用对象?

示例:

数据库有一个表Person。

在MVC应用程序中,我创建了一个edmx文件,它创建了一个名为Person的部分类。

在我的存储库中:

class Person PersonRepository()
{
    public Person GetPerson()
    {
      using (var db = new MyEntity())
      {
        var data = db.Person.FirstOrDefault();

        var person = new Person()
        {
            Id = data.PersonId,
            FirstName = data.FirstName,
            LastName = data.LastName
        };
        return person;   
    }
}

或者我需要这样做:

class Person PersonRepository()
{
    public Person GetPerson()
    {
      using (var db = new MyEntity())
      {
        var data = db.Person.FirstOrDefault();

        var person = new PersonDTO()
        {
            Id = data.PersonId,
            FirstName = data.FirstName,
            LastName = data.LastName
        };
        return person;   
    }
}

1 个答案:

答案 0 :(得分:2)

这完全取决于您的应用程序的预期复杂性。所以没有办法做这样的事情。 基本上,DTO类应仅包含需要转移到前端层的字段,而ViewModel类包含专门适用于视图的数据。 如果这些对象的设计是相同的,即如果业务层不会被某些视图特定的逻辑和概念所污染,或者视图层不会受到污染,则必须问自己一个问题。一些数据/业务层相关的逻辑。 如果应用程序不是那么大,并且视图所需的数据以及从存储库获得的数据预计不会有太大差异,那么您可以只使用ViewModel类,但是如果存在一些差异,或者可能在未来,最好有单独的类并处理映射器上的差异。