缺少类型映射配置或不支持的映射,一对一关系

时间:2017-07-03 10:46:55

标签: asp.net-mvc automapper

我有一对一的关系

  public class Book
    {
        public int BookId { get; set; }
        public string Name { get; set; }
        public string Annotation { get; set; }
        public virtual File File { get; set; }
        public int? SeriesId { get; set; }
        public DateTime UploadDate { get; set; }
        public virtual ICollection<Comment> Comments { get; set; }
        public virtual ICollection<Author> Authors { get; set; }
        public virtual ICollection<Genre> Genres { get; set; }
        public virtual ICollection<Mark> Marks { get; set; }
        public Book()
        {
            Comments = new List<Comment>();
            Authors = new List<Author>();
            Genres = new List<Genre>();
        }
    }

 public class File
    {
       [Key,ForeignKey("Book")]
        public int BookId { get; set; }
        public string FileName { get; set; }
        public string ContentType { get; set; }
        public byte[] Content { get; set; }
        public virtual  Book Book { get; set; }
    }

我想将数据传输到类:

public class BookDO
{
    public int BookId { get; set; }
    public string Name { get; set; }
    public string Annotation { get; set; }
    public virtual FileDO File { get; set; }

}


public class FileDO
    {

        public int BookId { get; set; }
        public string FileName { get; set; }
        public string ContentType { get; set; }
        public byte[] Content { get; set; }
        public virtual BookDO Book { get; set; }
    }

以这种方式:

 var books = Database.Books.GetAll().ToList();
            Mapper.Initialize(cf => cf.CreateMap<Book, BookDO>());
            return Mapper.Map<List<Book>, List<BookDO>>(books);

但是我得到了Missing类型的地图配置或不支持的映射。

映射类型: 档案 - &gt; FileDO Domain.File - &gt; BusinessLogic.Data_Objects.FileDO 也许我需要初始化一个mapper来将File映射到FileDO或修改现有的mapper配置?请帮帮我。

1 个答案:

答案 0 :(得分:0)

是的,您还需要为File - &gt;创建地图FileDo。必须为与Book - &gt;所用的相同映射器配置此映射。 BookDo

最好将映射配置包装到AutoMapper.Profile

using AutoMapper;
public class BookMappingProfile: Profile {
    public BookMappingProfile() {
        CreateMap<Book, BookDo>();
        CreateMap<File, FileDo>();
    }
}

然后用这些配置文件初始化映射器:

Mapper.Initialize(cfg => { 
    cfg.AddProfile<BookMappingProfile>(); 
    cfg.AddProfile<MyOtherProfile>();
});