抽象基本クラスから継承する多対多の関係を持つ2つのエンティティを、独自の抽象基本クラスからも継承するDtoにマップしようとしています。Essayクラスのマッピングのみを含めると、Booksコレクションがnullであることを除いて、すべて正常に機能します。そのコレクションのマッピングを追加するとすぐに、次の例外が発生します。
内部例外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)));
}
}
}
このマッピングを構成する別の方法があるかどうかを探していましたが、常にこの方法を見つけています。また、基本クラスのマッピングを具体的に追加しようとしましたが、まったく同じ結果が得られます。
私のWebAPIプロジェクトには、AutoMapper.Extensions.Microsoft.DependendyInjectionパッケージバージョン7.0.0が含まれています。
投稿のコメントの推奨事項によって要点を作成しているときに、Bookdtoのマッピングが欠落していることに気付きました。残念ながら、例外は問題について明確ではなかったので、ここで質問することになりました。マッピングを追加した後、すべてが期待どおりに機能し始めました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加