影片講解
終究還是開始慢慢倦怠了XD,以後可能有想寫文章的內容才會寫,不然只會有影片
在撈取資料和新增資料都可以使用AutoMapper幫助我們快速並精簡程式碼,那更新是不是一樣可以呢?當然可以,接下來就要來做示範。
首先別忘了,我們開頭是有注入AutoMapper的
private readonly IMapper _mapper;
public TodoController(TodoContext todoContext, IMapper mapper)
{
_mapper = mapper;
}
那接著我們就要做對應檔的設定,來到TodoListProfile.cs
上個影片我們一樣有創了一個更新專用的DTO,所以就要來這邊做個對應的設定。
CreateMap<TodoListPutDto, TodoList>()
.ForMember(
dest => dest.UpdateTime,
opt => opt.MapFrom(src => DateTime.Now)
)
.ForMember(
dest => dest.UpdateEmployeeId,
opt => opt.MapFrom(src => Guid.Parse("00000000-0000-0000-0000-000000000001"))
);
那我們這邊不只對應,還有另外把系統決定值得部分寫進了這裡,其中Guid是因為還沒做登入驗證,所以先寫死。
那把系統決定值的部分寫進設定檔裡的好處就是可以更分工明確,讓以下主要處理更新邏輯的程式碼更為簡潔,如下。
[HttpPut("AutoMapper/{id}")]
public void PutAutoMapper(Guid id, [FromBody] TodoListPutDto value)
{
var update = (from a in _todoContext.TodoLists
where a.TodoId == id
select a).SingleOrDefault();
if (update != null)
{
_mapper.Map(value, update);
_todoContext.SaveChanges();
}
}
那其中_mapper.Map(value, update)
就是取代掉我們上一篇所教的人工自行對應更新的部分,以下這部分。
update.Name = value.Name;
update.Orders = value.Orders;
update.Enable = value.Enable;
這樣子,我們整體程式碼是不是變得更簡潔,而且又不用再一項一項的作對應更新了。
以上就是這篇AutoMapper的簡單示範,想看詳細操作的話可以看影片。
範例檔案:下載
新手分享學習成果,若有錯誤,煩請告知修正,感謝🙏