4-6.ASP.NET Core Web API 入門教學 - 使用AutoMapper自動對應Dto欄位

ASP.NET Core Web API 入門教學

影片講解(有字幕)


這篇文章要來介紹一個實用的套件AutoMapper,當我們使用Dto時會有以下這種寫法,還不知道Dto做什麼用的可以看這裡(什麼是DTO)

[HttpGet]
public IEnumerable<TodoListSelectDto> Get()
{
    var result = _todoContext.TodoLists
        .Select(a => new TodoListSelectDto
        {
            Enable = a.Enable,
            InsertEmployeeName = a.InsertEmployee.Name,
            InsertTime = a.InsertTime,
            Name = a.Name,
            Orders = a.Orders,
            TodoId = a.TodoId,
            UpdateEmployeeName = a.UpdateEmployee.Name,
            UpdateTime = a.UpdateTime
        });

    return result;
}

可以看到要自行對應相當多的欄位,如果今天欄位少還不覺得怎樣,那欄位一多的話,你就要寫相當多的對應,不僅容易出錯,也相當繁瑣無意義。所以今天我們可以用AutoMapper來幫我們自動實現原始資料跟Dto的轉換。

首先我們要去NuGet套件管理工具下載AutoMapper。

選擇AutoMapper.Extensions.Microsoft.DependencyInjection,這個是for ASP.NET Core的版本。

然後我們要到Startup.cs這邊ConfigureServices裡加上一個設定services.AddAutoMapper(typeof(Startup))

public void ConfigureServices(IServiceCollection services)
{   
    services.AddControllers();
    services.AddDbContext<TodoContext>(options => options.UseSqlServer(Configuration.GetConnectionString("TodoDatabase")));
    //找個好位置放
    services.AddAutoMapper(typeof(Startup));
}

接著我們要建立一個AutoMapper的對應設定檔,我們這邊可以創一個Profiles的資料夾專門來放。

然後建立一個TodoListProfile.cs並繼承Profile<--AutoMapper提供的

namespace Todo.Profiles
{
    public class TodoListProfile : Profile
    {
        public TodoListProfile()
        {
            CreateMap<TodoList, TodoListDto>();
        }
    }
}

然後建立以上的程式碼片段CreateMap<TodoList, TodoListDto>();這邊是要告訴他TodoList跟TodoListDto是有對應關係。

然後我們改一下原來的程式碼。

[HttpGet]
public IEnumerable<TodoListDto> GetAutoMapper()
{
    var result = _todoContext.TodoLists;
    var map = _mapper.Map<IEnumerable<TodoListDto>>(result);
    return map;
}

其中本來要自己去對應Dto我們就先不做對應,直接取出資料表內容var result = _todoContext.TodoLists;,接著我們再使用AutoMapper幫我們做轉換,var map = _mapper.Map<IEnumerable<TodoListDto>>(result),這樣的意思就是說將我們的result轉換成IEnumerable,所以最後的map就會是轉好的格式。接著我們再return map,就大功告成。

如此程式是不是就變的簡潔明瞭了呢~~~所以透過AutoMapper就可以將多行轉換的程式碼,替換成一行就解決了,當然這只是AutoMapper其中的功能之一,往後還會陸續介紹。

以上是今天的簡單教學,想看更多的內容可以看影片。

新手分享學習成果,若有錯誤,煩請告知修正,感謝🙏




Copyright © 凱哥寫程式 2022 | Powered by TalllKai ❤