myesn

myEsn2E9

hi
github

ABP: EFCoreのクエリでIncludeナビゲーションプロパティを使用する

クラス MyService : CrudAppService {}

例えば、MyService.GetListAsync を呼び出す際に Include ナビゲーションプロパティが必要な場合、GetListAsync のデフォルト実装内で呼び出される CreateFilteredQueryAsync をオーバーライドするだけで済みます。この関数では IQueryable<Entity> を取得しますので、以下のようにオーバーライドします:

protected override async Task<IQueryable<ReportPartTwo>> CreateFilteredQueryAsync(ReportPartTwoGetListRequestDto input)
{    
    return await ReadOnlyRepository.WithDetailsAsync(x => x.Customer);
    //return await ReadOnlyRepository.GetQueryableAsync();
}

WithDetailsAsync 関数のラムダ式にはナビゲーションプロパティが含まれています。複数の場合は、new { x.A, x.B } のような書き方になるかもしれません。

Include 後、XDto を変更し、その後 Mapper のマッピングを変更する必要があります。これにより、GetListAsync の出力からナビゲーションプロパティオブジェクトの値を取得できます。例えば:

using AutoMapper;
using X.Dtos;

namespace X;

public class XApplicationAutoMapperProfile : Profile
{
    public XApplicationAutoMapperProfile()
    {
        /* ここで AutoMapper のマッピング設定を構成できます。
         * または、マッピング設定を複数のプロファイルクラスに分割することもできます。 */
        CreateMap<X, XDto>()
            .ForMember(dest => dest.CustomerName, opt => opt.MapFrom(src => src.Customer.Name));
    }
}

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。