問
當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, 並寫入資料庫, 而無需手動寫轉換邏輯, 是相當方便的.