場合によっては、リポジトリから複合DTOを返す必要があります。この場合、DTOにはモデルプロパティであるいくつかのプロパティがあり、DTOの機能は単純な複合オブジェクトであるだけです(Queryableを返すだけでは不十分です。 Tよりも多くの情報です)
例えば:
モデル:
public class Job
{
int Id { get; set; }
//more properties
}
public class JobApplication
{
int Id { get; set; }
//more properties
}
リポジトリ
IQueryable<JobAndUserApplication> GetJobAndMatchingUserApplication(int userId)
::
public class JobAndUserApplication
{
public Job Job { get; set; }
public JobApplication JobApplication { get; set; }
}
今-単純に実行したい(ProjectとToはAutomapper機能です):
//this allows one efficient query to bring in the subproperties of the composite DTO
var jobVmList = jobRepository.GetAllJobsAndMatchingJobApplicationByUser(userId)
.Project()
.To<JobVM>()
.ToList();
したがって、次のようなマッピングが必要です。
Mapper.CreateMap<JobAndUserApplication, JobVM>()
.ForMember(jvm => jvm, opt => opt.ResolveUsing(src => src.Job));
//many other .ForMembers that are not relevant right now
DTOのJobプロパティをJobVM(同じプロパティの多くを共有する)に直接マップしようとしています。
私のマッピングは次の例外をスローします:
メンバーのカスタム構成は、タイプの最上位の個々のメンバーに対してのみサポートされます。
何が間違っているのでしょうか。また、JobVM自体のDTOのJobプロパティからマッピングを実行するにはどうすればよいですか。
ありがとう