Я пытаюсь отобразить две сущности с отношением «многие ко многим», которые наследуются от абстрактного базового класса, в Dtos, которые также наследуют от своего собственного абстрактного базового класса. Когда я включаю отображение только для класса Essay , все работает нормально, за исключением того, что коллекция Books равна нулю, как только я добавляю отображение для этой коллекции, я получаю следующее исключение:
Внутреннее исключение 1: ArgumentException: невозможно создать экземпляр абстрактного типа Dtos.Dto`1 [System.Int64].
Рассмотрим следующий код:
namespace Entities
{
public abstract class Entity<TId> : Entity
where TId : struct, IEquatable<TId>
{
protected Entity()
{
}
public TId Id { get; set; }
}
public class Essay : Entity<long>
{
public string Name { get; set; }
public string Author { get; set; }
public List<EssayBook> EssayBooks { get; set; }
}
public class Book : Entity<long>
{
public string BookName { get; set; }
public string Publisher { get; set; }
public List<EssayBook> EssayBooks { get; set; }
}
public class EssayBook
{
public long EssayId { get; set; }
public long BookId { get; set; }
public Essay Essay { get; set; }
public Book Book { get; set; }
}
}
namespace Dtos
{
public abstract class Dto<TId>
where TId : struct, IEquatable<TId>
{
protected Dto()
{
}
public TId Id { get; set; }
}
public sealed class Essay : Dto<long>
{
public string Name { get; set; }
public string Author { get; set; }
public List<Book> Books { get; set; }
}
public class Book : Dto<long>
{
public string BookName { get; set; }
public string Publisher { get; set; }
}
}
namespace DtoMapping
{
internal sealed class EssayBookProfile : Profile
{
public EssayBookProfile()
{
this.CreateMap<Entities.Essay, Dtos.Essay>()
.IncludeBase<Entities.Entity<long>, Dtos.Dto<long>>()
.ForMember(dto => dto.Books, opt => opt.MapFrom(e => e.EssayBooks.Select(pl => pl.Book)));
}
}
}
Я искал, есть ли другой способ настроить это отображение, но я всегда нахожу этот способ. Я также пытался специально добавить сопоставления для базовых классов, но получаю точно такой же результат.
В свой проект веб-API я включил пакет AutoMapper.Extensions.Microsoft.DependendyInjection версия 7.0.0 .