Я использую AutoMapper. Я столкнулся с проблемой сопоставления моего DTO с объектом базы данных. Я хочу обновить свои существующие данные в базе данных, сопоставляя мой обновленный DTO с DB Entity с помощью AutoMapper, а не вручную сопоставляя DTO с DB Entity.
Прежде всего определите свой 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/