Почему вы ожидаете, что model.Adapt<Book>()
даст какой-либо результат здесь? Сопоставление сущностей обычно работает путем копирования похожих свойств. Это работает для AuthorRequest
и Author
, поскольку они оба содержат одинаковые свойства. Поэтому, когда вы отображаете model
, который является AuthorRequest
, вы должным образом получаете заполненный Author
объект обратно.
Однако, когда вы пытаетесь сопоставить тот же AuthorRequest
с (одиночным) Book
, это не сработает, поскольку они слишком разные: AuthorRequest
имеет свойства Name
, Surname
, и Books
, тогда как Book
обладает свойствами Title
и Author
. Там просто нет совпадения.
То, что вы можете сделать, это сопоставить книги, которые являются в AuthorRequest
объекте, делая это:
var bookEntities = model.Books.Adapt<Book[]>();
Это не отобразит коллекцию BookRequest
объектов, находящихся в модели, в массив Book
. Это должно работать как ожидалось.
Обратите внимание, что Mapster уже достаточно умен, чтобы самостоятельно отображать вложенные типы. Если вы посмотрите на объект authorEntity
, вы увидите, что вложенные объекты книги были также правильно сопоставлены. Поэтому, если вы хотите отобразить AuthorRequest
(который содержит BookRequest
s) на Author
сущность, содержащую Book
сущностей, тогда вашей первой строки уже должно быть достаточно:
var r = new AuthorRequest
{
Name = "William",
Surname = "Shakespeare",
Books = new BookRequest[] {
new BookRequest { Title = "Macbeth" },
new BookRequest { Title = "Romeo and Juliet" },
},
};
r.Adapt<Author>().Dump();