當DTO與DataModel不同時,例如:有2個Entity分別是Order和OrderDetail,使用Orders的DTO.以此為例用AutoMapping寫入


public class Orders
{
	public string OrderNo { get; set; } = null!;
	public string OrderDate { get; set; } 
	public string Sale { get; set; } 
}

public class OrdersDetail
{
	public string OrderNo { get; set; } = null!;
	public string OrderSrno { get; set; } 
	public string Item { get; set; } 	
	public int Qty { get; set; } 	
}

public class OrdersDto
{
	public string OrderNo { get; set; } = null!;
	public string OrderDate { get; set; } 
	public string Sale { get; set; }
	public string OrderSrno { get; set; } 
	public string Item { get; set; } 	
	public int Qty { get; set; } 	
}

如果您的 DTO 和 Data Model 不同,且需要將 OrdersDto 轉換成 Orders 和 OrdersDetail 並寫入資料庫,您可以使用 AutoMapper 套件來實現。

首先,您需要在 Startup 類別的 ConfigureServices 方法中配置 AutoMapper,並定義 DTO 和 Data Model 之間的映射關係。

services.AddAutoMapper(typeof(Startup));
接著,您需要在類別設定, 將DTO轉換成DataModel的映射關係

CreateMap< OrdersDto, Orders >();
CreateMap< OrdersDto, OrdersDetail >()
    .ForMember(dest => dest.OrderNo, opt => opt.MapFrom(src => src.OrderNo))
    .ForMember(dest => dest.OrderSrno, opt => opt.MapFrom(src => src.OrderSrno))
    .ForMember(dest => dest.Item, opt => opt.MapFrom(src => src.Item))
    .ForMember(dest => dest.Qty, opt => opt.MapFrom(src => src.Qty));
  
之後,您就可以在需要寫入資料庫時使用 AutoMapper 的 Map 方法將 DTO 轉換為 Orders 和 OrdersDetail 的 Data Model,

OrdersDto ordersDto = GetOrdersDto();
Orders orders = _mapper.Map(ordersDto);
OrdersDetail ordersDetail = _mapper.Map(ordersDto);
然後將轉換後的 Data Model 寫入資料庫。

_context.Orders.Add(orders);
_context.OrdersDetail.Add(ordersDetail);
_context.SaveChanges();

這樣就可以在 DTO 和 Data Model 不同的情況下使用 AutoMapper 將 DTO 寫入資料庫了。

總之, 使用AutoMapper可以自動將DTO轉換成DataModel, 並寫入資料庫, 而無需手動寫轉換邏輯, 是相當方便的.