如果我使用EF和视图模型,我需要创建dto吗?

本文关键字:创建 dto 模型 EF 视图 如果 | 更新日期: 2023-09-27 18:06:40

我读到实体框架(我使用EF6)是从数据库的抽象。我使用视图模型将数据提供给我的视图,这样EF实体就不会越过我的控制器。我正在使用与linq查询的存储库来获取数据。在控制器中,我实例化了repo并获取了数据。

那么,是否有理由为控制器和回购之间的事务创建一个专用对象呢?

的例子:

数据库中有一个Person表。

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

In my Repository:

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;   
    }
}

如果我使用EF和视图模型,我需要创建dto吗?

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