我有兩個模型類作者和書兩DTO類BookDTO和BookDetailDTO如下圖所示AutoMapper映射問題?
public class Author
{
public int Id { get; set; }
[Required()]
public string Name { get; set; }
}
public class Book
{
public int Id { get; set; }
[Required()]
public string Title { get; set; }
public int Year { get; set; }
public decimal Price { get; set; }
public string Genre { get; set; }
public int AuthorId { get; set; }
public virtual Author Author { get; set; }
}
public class BookDTO
{
public int Id { get; set; }
public string Title { get; set; }
public string AuthorName { get; set; }
}
public class BookDetailDTO
{
public int Id { get; set; }
public string Title { get; set; }
public int Year { get; set; }
public decimal Price { get; set; }
public string AuthorName { get; set; }
public string Genre { get; set; }
}
我使用AutoMapper做映射如下圖所示
public class MapConfig
{
public static void RegisterMapping()
{
AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Book, BookDTO>()
.ForMember(dest => dest.AuthorName, opt => opt.MapFrom(src => src.Author.Name)));
AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Book, BookDTO>()
.ForMember(dest => dest.AuthorName, opt => opt.MapFrom(src => src.Author.Name)).ReverseMap());
//AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Book, BookDetailDTO>()
//.ForMember(dest => dest.AuthorName, opt => opt.MapFrom(src => src.Author.Name)));
//AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap<Book, BookDetailDTO>()
//.ForMember(dest => dest.AuthorName, opt => opt.MapFrom(src => src.Author.Name)).ReverseMap());
}
}
現在,我得到的名單BooksController
public class BooksController : ApiController
{
private BookServiceContext db = new BookServiceContext();
public IQueryable<BookDTO> GetBooks()
{
var books = AutoMapper.Mapper.Map<IEnumerable<Book>, IEnumerable<BookDTO>>(db.Books);
return books.AsQueryable();
}
}
它列出書籍列表。
但是,當我取消註釋映射BookDetailDTO在MapConfig.cs,我試圖讓書籍的列表,它引發以下錯誤
映射類型:IEnumerable的
1 -> IEnumerable
1 System.Collections中 .Generic.IEnumerable1[[BookService.Models.Book, BookService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable
1 [[BookService.Models.BookDTO, bookService的,版本= 1.0.0.0,文化=中性公鑰=空]]
我需要從預訂至BookDetailDTO映射以顯示詳細信息這本書。 我在做什麼錯?我使用AutoMapper 5.1.1
這是正確的路要走。您需要在AppDomain之前調用一次初始化(就像初始化您的ORM一次或DI容器等一樣)。大多數人做的是通過配置文件初始化AutoMapper: https://github.com/AutoMapper/AutoMapper/wiki/Configuration#assembly-scanning-for-auto-configuration –