Я пытаюсь использовать Automapper для выравнивания объекта Entityframework, который имеет вложенное комплексное свойство, для нескольких различных моделей, которые все наследуют одинаковые общие свойства из базового класса, упрощенная версия этого выглядит следующим образом:
public class EFObject {
public int Id { get; set; }
public int NestedId { get; set; }
public virtual AnotherModel AnotherModel { get; set; }
}
public class AModel : Model {
public int AModelId { get; set; }
}
public class BModel : Model {
public int BModelId { get; set; }
}
Поскольку и AModel, и BModel совместно используют общую базу (модель), в идеале я хотел бы объявить общую карту следующим образом:
mapper.Map<AnotherModel, Model>();
А затем при отображении EFObject в AModel я сопоставлюСвойство AModelId в
mapper.Map<EFObject, AModel>();
и затем включает карту AnotherModel -> Model, чтобы мне не приходилось отображать общие свойства несколько раз (один раз для AModel и снова для BModel и т. Д.).
Мне удалось достичь вышеизложенного с помощью AfterMap, то есть
CreateMap<EFObject, AModel>()
.AfterMap((src, dest) => Mapper.Map(src.AnotherModel, dest))
.ReverseMap();
Однако существует довольно серьезная проблема с этим решением в том, что оно опирается на статический экземпляр Automapper, и, как яВ зависимости от внедрения экземпляра Automapper все мои модульные тесты, использующие эту карту, не работают из-за того, что не создан экземпляр статического Mapper..
Я мог бы обойти эту проблему, инициализируя статический экземпляр в моем модульном тесте, но, поскольку он требует знания структуры ваших карт, он побеждает цель использования Automapper (я чувствую).
Я также знаю, что мог бы написать конвертер для каждой Модели, однако это не идеально, поскольку он производит много дополнительного кода для чего-то, что, по моему мнению, поддерживается, но я изо всех сил пытаюсь найти ответ.
Есть идеи, как лучше структурировать мои карты, чтобы обойти эту проблему?