我有两个模型类作者和书两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 –