【发布时间】:2019-07-02 14:13:02
【问题描述】:
我目前正在使用 Automapper 从我的域模型映射到 DTO。在我的里面
域模型我有 3 个布尔属性(IsHomeowner、IsTenant、IsLivingWithParents)用于设置属性的值
在 ViewModel 内部,即 PersonDTO 称为 LivingStatus
但是,为了获得最终结果,我必须遍历 Person 模型,创建 Dictionary
存储我的值,然后使用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;
}
}));
}
【问题讨论】:
-
您说“它有效”,但这甚至无法编译。
persons是List<Person>但您正在访问像IsHomeOwner这样存在于单个Person上的属性? -
好点 @stuartd 我在输入示例时错过了它:) 现在排序
-
为什么不在映射过程中为该特定属性使用自定义值解析器?
标签: c# automapper dto