using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello Library");
MockLibrary mockLibrary = new MockLibrary();
var library = mockLibrary.Data();
var libraryDto = mockLibrary.DataDto();
var myProfile = new AutoMapping();
var configuration = new MapperConfiguration(cfg => cfg.AddProfile(myProfile));
var _mapper = new Mapper(configuration);
library.Books.ForEach(book => {
var mappedBook = _mapper.Map<BookViewModel>(book);
Console.WriteLine($"mapped book: {mappedBook.BookId}, Author count: {mappedBook.Authors.Count}");
mappedBook.Authors.ForEach(bk => {
Console.WriteLine($"mapped book author: {bk.AuthorId}, name: {bk.AuthorName}");
Console.WriteLine("Library mapped data");
public class AutoMapping : Profile{
CreateMap<Book, BookViewModel>()
.ForMember(dest => dest.Authors, opt => opt.MapFrom(src => src.BookAuthors
.Select(bookAuthor => new Author { AuthorId = bookAuthor.AuthorId})))
.ForMember(dest => dest.BookAuthors, opt => opt.MapFrom(src => src.Authors
new { src.BookId, Book = src, author.AuthorId, Author = author })))
CreateMap<Author, AuthorViewModel>()
public int BookId { get; set; }
public List<BookAuthor> BookAuthors { get; set; } = new List<BookAuthor>();
public int AuthorId { get; set; }
public string AuthorName { get; set; }
public List<BookAuthor> BookAuthors { get; set; } = new List<BookAuthor>();
public int BookId { get; set; }
public Book Book { get; set; }
public int AuthorId { get; set; }
public Author Author { get; set; }
public class BookViewModel
public int BookId { get; set; }
public virtual List<AuthorViewModel> Authors { get; set; } = new List<AuthorViewModel>();
public class AuthorViewModel
public int AuthorId { get; set; }
public string AuthorName { get; set; }
public class MockLibrary {
public LibraryContext libraryContext {get;set;} = new LibraryContext();
public LibraryContext libraryContextDto {get;set;} = new LibraryContext();
public LibraryContext Data(){
var book1 = new Book { BookId = 1 };
var book2 = new Book { BookId = 2 };
var book3 = new Book { BookId = 3 };
var book4 = new Book { BookId = 4 };
var author1 = new Author { AuthorId = 1, AuthorName = "CBZ" };
var author2 = new Author { AuthorId = 2, AuthorName = "ABS" };
book1.BookAuthors.Add(new BookAuthor { BookId = book1.BookId, AuthorId = author1.AuthorId });
book2.BookAuthors.Add(new BookAuthor { BookId = book2.BookId, AuthorId = author1.AuthorId });
book3.BookAuthors.Add(new BookAuthor { BookId = book3.BookId, AuthorId = author1.AuthorId });
book3.BookAuthors.Add(new BookAuthor { BookId = book3.BookId, AuthorId = author2.AuthorId });
book4.BookAuthors.Add(new BookAuthor { BookId = book4.BookId, AuthorId = author2.AuthorId });
libraryContext.Books.AddRange(new List<Book> {book1, book2, book3, book4});
libraryContext.Authors.AddRange(new List<Author> {author1, author2});
public LibraryContext DataDto(){
var book6 = new Book { BookId = 6 };
var book7 = new Book { BookId = 7 };
var book8 = new Book { BookId = 8 };
var book9 = new Book { BookId = 9 };
var author1 = new Author { AuthorId = 1, AuthorName = "CBZ" };
var author2 = new Author { AuthorId = 2, AuthorName = "ABS" };
book6.BookAuthors.Add(new BookAuthor { BookId = book6.BookId, AuthorId = author1.AuthorId });
book7.BookAuthors.Add(new BookAuthor { BookId = book7.BookId, AuthorId = author1.AuthorId });
book8.BookAuthors.Add(new BookAuthor { BookId = book8.BookId, AuthorId = author1.AuthorId });
book8.BookAuthors.Add(new BookAuthor { BookId = book8.BookId, AuthorId = author2.AuthorId });
book9.BookAuthors.Add(new BookAuthor { BookId = book9.BookId, AuthorId = author2.AuthorId });
libraryContextDto.Books.AddRange(new List<Book> {book6, book7, book8, book9});
libraryContextDto.Authors.AddRange(new List<Author> {author1, author2});
return libraryContextDto;
public class LibraryContext
public List<Book> Books { get; set; } = new List<Book>();
public List<Author> Authors { get; set; } = new List<Author>();