Во-первых, да, вы всегда должны использовать DTO.Независимо от того, имеете ли вы дело с обычным веб-сайтом или API, вы не должны никогда напрямую сохранять объект, созданный из почтовых данных.Это открывает огромную дыру в безопасности, где люди могут манипулировать почтовыми данными и создавать всевозможные неприятности.По иронии судьбы, вы можете связать свой класс сущностей, но если вы это сделаете, вам никогда не следует сохранять этот экземпляр, а создавать новый экземпляр, отображать данные из опубликованного экземпляра, а затем сохранять созданный вами экземпляр - важныйчасть никогда не сохраняет опубликованный экземпляр.Использование модели представления / DTO только делает более очевидным, что вы должны выполнять отображение в уравнении, и, как таковой, это рекомендуемый подход.
Что касается AutoMapper, рекомендуется не использовать для обратного отображенияпотому что существует множество нюансов, связанных с отображением того, что будет сохранено в базе данных.Особенно, когда у вас есть ORM, такие как Entity Framework.Вы можете использовать AutoMapper, но вам просто нужно знать обо всех этих нюансах и обрабатывать их соответствующим образом.Вообще говоря, в этих сценариях, вероятно, в любом случае проще выполнить сопоставление вручную, так как оно обычно включает в себя так много настроек для чего-то вроде AutoMapper, что вы не экономите много времени в долгосрочной перспективе.Ручное отображение так же, как звучит.Если вы создаете новый Book
, то вы просто создаете новый экземпляр Book
.Если вы изменяете существующий Book
, вы извлекаете его экземпляр из базы данных.В любом случае, теперь у вас есть экземпляр Book
и экземпляр чего-то вроде BookDTO
, который был создан из почтовых данных.Тогда вы просто:
book.Title = bookDto.Tile;
// etc.
Для чего-то вроде отношений с автором вам может потребоваться выполнить дополнительные запросы.Например:
var author = _context.Authors.SingleOrDefault(x => x.Name == bookDto.AuthorName);
book.Author = author;