ASP .Net Core:多对多关系和 AutoMapper

ASP .Net Core: Many-to-Many relationship and AutoMapper

我有 2 个通过多对多关系连接的实体。

第一个class:

 public class ArticleCategory
 {
        public int Id {get; set; }

        public string MainCategoryName { get; set; }

        public List<ArticleCategorySubcategory> ArticleCategorySubcategories { get; set; } = new List<ArticleCategorySubcategory>();

        public bool IsActive { get; set; }
 }

第二个class:

 public class ArticleSubcategory
 {
        public int Id { get; set; }
    
        public string SubcategoryName { get; set; }

        public List<ArticleCategorySubcategory> ArticleCategorySubcategories { get; set; } = new List<ArticleCategorySubcategory>();
 }

和关系(多对多):

 public class ArticleCategorySubcategory : BaseHistoryEntity
    {
        public int Id { get; set; }

        public int ArticleCategoryId { get; set; }

        public ArticleCategory ArticleCategory { get; set; }

        public int ArticleSubcategoryId { get; set; }

        public ArticleSubcategory ArticleSubcategory {get; set;}
    }

我还有 1 个 DTO:

 public class ArticleCategoryResult
    {
        public string CategoryName { get; set; }

        public List<string> Subcategories { get; set; }

        public bool IsActive { get; set; }
    }

我想使用 AutoMapper 来列出子类别的名称。我试过类似的方法,但我得到一个空列表。

我的 Automapper 代码:

CreateMap<ArticleCategory, ArticleCategoryResult>()
              .ForMember(dst => dst.CategoryName, opt => opt.MapFrom(src => src.MainCategoryName))
              .ForMember(dst => dst.IsActive, opt => opt.MapFrom(src => src.IsActive))
              .ForMember(dst => dst.Subcategories, src => src.MapFrom(mbr => mbr.ArticleCategorySubcategories.Select(x => x.ArticleSubcategory.SubcategoryName)));

结果显示为 json:

{
  "categoryName": "Example category 6",
  "subcategories": [],
  "isActive": true
}

这是我对这些表的配置:

 public void Configure(EntityTypeBuilder<ArticleCategorySubcategory> builder)
 {
            builder
                .HasKey(x => x.Id);

            builder
                .HasOne(x => x.ArticleCategory)
                .WithMany(x => x.ArticleCategorySubcategories)
                .HasForeignKey(x => x.ArticleCategoryId);

            builder
                .HasOne(x => x.ArticleSubcategory)
                .WithMany(x => x.ArticleCategorySubcategories)
                .HasForeignKey(x => x.ArticleSubcategoryId);
  }

如何使用 AutoMapper 列出子类别的名称?

您需要在 .Select(.. 之前添加 .Include(x=>x.ArticleSubcategory),因为相关对象未被跟踪并被视为未定义。