使用Automapper将数据库实体映射到DTO

本文关键字:映射 DTO 实体 数据库 Automapper 使用 | 更新日期: 2023-09-27 18:19:42

我正在使用AutoMapper。我面临着一个关于将我的DTO映射到数据库实体的问题。我想通过使用AutoMapper将更新后的DTO映射到DB实体来更新数据库中的现有数据,而不是手动将DTO映射至DB实体。

使用Automapper将数据库实体映射到DTO

首先定义与实体相关的DTO。例如

public class Author {
    public string Name { get; set; }
}
public class Book {
    public string Title { get; set; }
    public Author Author { get; set; }
}
public class BookDTO {
    public string Title { get; set; }
    public string Author { get; set; }
}

然后在应用程序启动代码中的某个位置初始化Automap:

AutoMapper.Mapper.CreateMap<Book, BookDTO>()
    .ForMember(dest => dest.Author,
           opts => opts.MapFrom(src => src.Author.Name));
AutoMapper.Mapper.CreateMap<Book, BookDTO>().ReverseMap()

现在,从DTO到实体的更新方法示例:

    public int Update(BookDTO dto) {
        var entity = _context.Books.FindAsync(dto.id);
        if (entity == null) throw new ItemNotFoundException(dto.id);
        AutoMapper.Mapper.Map(dto, entity)
        return _context.SaveChanges();
    }

插入的另一个示例:

    public int Insert(BookDTO dto) {
        var entity = AutoMapper.Mapper.Map<Book>(dto);
        _context.Provinces.Add(entity);
        return _context.SaveChanges();
    }

有关的更多信息http://cpratt.co/using-automapper-getting-started/