从与 AsyncCrudAppService 的关系中获取数据

Get data from relationship with AsyncCrudAppService

我正在使用 asp.net 样板,我想 return 从 api 调用具有 属性 的 DTO,它必须从实体。

该服务很简单,继承自 AsyncCrudAppService:

public class ItemAppService : AsyncCrudAppService<Core.Item, ItemDto>, IItemAppService
{
    ...
}

在请求任何 Get 或 GetAll 方法时,我需要从类别(即关系,见下文)中获取描述,return是 ItemDTO。

public class ItemDto : EntityDto
{
    public string Name { get; set; }
    public int? CategoryId { get; set; }
    public string CategoryDescription { get; set; }
}

为了澄清,我有以下两个实体有关系。

public class Item : Entity {

    public string Name { get; set; }
    public int? CategoryId { get; set; }

    public virtual Category Category { get; set; }

}
public class Category : Entity {

    public string Description { get; set; } 
    public virtual ICollection<Item> Items { get; set; }   

}

在 EntityFrameworkCore 映射中产生以下关系:

...
public void Configure(EntityTypeBuilder<Item> builder)
{
    builder.HasOne<Category>(e => e.Category).WithMany(c => c.Items).HasForeignKey(c => c.CategoryId);
}

自动映射器配置文件配置:

public class ItemProfile : Profile
{
     public ItemProfile()
     {
         CreateMap<ItemDto, Core.Item>();             

         CreateMap<Core.Item, ItemDto>()
                .ForMember(p => p.CategoryDescription, options => options.MapFrom(x => x.Category.Description));
    }
}

目前,ItemDto 中的 CategoryDe​​sciption returning 为 null,显然是因为它没有正确映射。我可以用 automapper 做些什么来获取描述吗?或者如何完成。

我认为您的映射是正确的,但问题是您没有获得相关实体,因为 AsyncCrudAppService 默认情况下不包含任何关系。 (检查 GetAllAsync 方法实现 here

您需要通过覆盖 CreateFilteredQuery 方法(检查实现 here)自己包含它

return Repository.GetAll().Include(x=>x.Category);