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; }
}
以下のように私は今、私はのリストを取得し、私は
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());
}
}
以下のようにマッピングを行うためにAutoMapperを使用する2つのモデルクラスの著者とブックと2つのDTOクラスBookDTOとBookDetailDTOを持っていますBooksControlを通じて
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();
}
}
書籍のリストを記載しています。
しかし、私はMapConfig.csでBookDetailDTOのマッピングをアンコメントし、私は本のリストを取得しようとすると、それは次のようなエラーに
マッピングタイプスロー:IEnumerableをにSystem.Collectionsを.Generic.IEnumerable
1[[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、カルチャニュートラル、PublicKeyToken = = null]]
私は詳細を表示するブックからBookDetailDTOへのマッピングを必要とします本の 私は何が間違っていますか?私はAutoMapper 5.1.1を使用しています
これは正しい方法です。 AppDomainの前に一度initializeを呼び出す必要があります(ORMを一度しか初期化しないか、DIコンテナなど)。ほとんどの人は、プロファイルを使ってAutoMapperを初期化します: https://github.com/AutoMapper/AutoMapper/wiki/Configuration#assembly-scanning-for-auto-configuration –