クラス 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));
}
}
参考#
- https://stackoverflow.com/a/64629710/7712266
- https://docs.abp.io/en/abp/latest/Best-Practices/Entity-Framework-Core-Integration
- https://stackoverflow.com/questions/42135149/ef-core-no-include-method-on-dbset
- https://github.com/abpframework/abp/issues/2474
- https://docs.abp.io/zh-Hans/abp/latest/Best-Practices/Entity-Framework-Core-Integration
- https://docs.abp.io/en/abp/latest/Entity-Framework-Core