В настоящее время я использую Automapper для сопоставления моей модели домена с DTO.Внутри моей модели Домена у меня есть 3 свойства bool (IsHomeowner
, IsTenant
, IsLivingWithParents
), которые используются для установки значения свойства внутри ViewModel, т.е. PersonDTO
, называемого LivingStatus
ОднакоЧтобы получить конечный результат, мне нужно пройтись по модели Person
, создать словарь для хранения моих значений, а затем с помощью AfterMap
создать вложенный цикл и установить значение внутри него.
Хотя это работает, но не является идеальным решением, так как оно увеличивает вероятность утечек памяти при увеличении размера данных.
Так было ли интересно, есть ли в AutoMapper что-нибудь, чтобы избежать этого?
Вот мой код
Просмотр модели
public class PersonDTO{
public int Id { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public Status LivingStatus { get; set; }
}
Модель домена
public class Person{
public int Id { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public bool IsHomeOwner { get; set; }
public bool IsTenant { get; set; }
public bool IsLivingWithParents { get; set; }
}
public enum Status{
Homeowner=1,
Tenant=2,
LivingWithParents=3
}
public List<PersonDTO> GetEmployee(List<Person> persons)
{
var livingStatus = new Dictionary<int, Status>();
foreach (var person in persons)
{
if (person.IsHomeOwner)
{
livingStatus.Add(person.Id, Status.Homeowner);
}
else if (person.IsTenant)
{
livingStatus.Add(person.Id, Status.Tenant);
}
else
{
livingStatus.Add(person.Id, Status.LivingWithParents);
}
}
return _mapper.Map<List<Person>, List<PersonDTO>>(persons, opts => opts.AfterMap((src, dest) {
foreach(var person in dest)
{
person.LivingStatus = livingStatus.Single(x => x.Key == person.Id).Value;
}
}));
}