Будет ли это работать для вас?
CreateMap<CasePlan, CasePlanView>()
.ConstructUsing((caseplan, b) => {
var client= a.PrimaryReferral.Client;
return new CasePlanView(){
ClientName= client.FullName,
ClientBirthDate= client.BirthDate //and so on
}
});
Таким образом, по крайней мере, вы не получите доступ к базе данных более одного раза для свойств a.PrimaryReferral.Client
. Однако вам потребуется доступ к базе данных для каждого объекта, который имеет свойства.
Один из способов исправить это - устранить необходимость в отложенной загрузке с использованием include в источнике CasePlan
. Я не знаю, сможете ли вы это сделать, но это был бы мой совет.
Другой способ, который я бы не рекомендовал, - это ввести DatabaseContext
(или хранилище) в маппер. и используя PK CasePlan
, вы снова получаете CasePlan
из базы данных. (По сути, это не будет отображаться из объекта CasePlan
, но приведет к повторному получению объекта из БД. Поэтому это вызовет дополнительные проблемы, если данные из объекта CasePlan
не совпадают с данными в БД).