【发布时间】:2018-11-17 06:21:29
【问题描述】:
我在 C# 中有两个具有一对多关系的模型:
public class Make
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Model> Models { get; set; }
}
public class Model
{
public int Id { get; set; }
public string Name { get; set; }
public Make Make { get; set; }
public int MakeId { get; set; }
}
DTO 如下:
public class MakeDto
{
public int Id { get; set; }
public int ModelId { get; set; }
public ICollection<Models> Models { get; set; }
}
我正在使用 Automapper 在更新操作中映射 DTO,问题是添加/删除集合工作正常,但 添加新项目 和 更新现有项目 没有工作。
public AutoMapperProfile()
{
CreateMap<MakeDto, Make>()
.ForMember(m => m.Id, opt => opt.Ignore())
.ForMember(m => m.Model, opt => opt.Ignore())
.AfterMap((dt, m) =>
{
// Remove Model
var removedModel = m.Model.Where(x => !dt.Model.Any(f => f.Id == x.Id)).ToList();
foreach (var m in removedModel)
m.Model.Remove(m);
// Add new Model
var addedModel = dt.Model.Where(x => !m.Model.
Any(f => f.Id == x.Id))
.Select(x => new Model
{
Id = dt.Id,
Name = x.Name
})
.ToList();
foreach (var m in addedModel)
m.Model.Add(m);
}).AfterMap((dt, m) =>
{
//Update Model
m.Model = m.Model.Where(x => dt.Model.Any(f => f.Id == x.Id))
.Select(x => new Model
{
Name = dt.Model.FirstOrDefault(x => x.Id == x.Id).Name,
}).ToList();
});
}
【问题讨论】:
-
试试 AutoMapper.Collection。
-
我无法满足 m\y 的需求。
-
映射到现有集合时,首先清除目标集合。如果没有 AutoMapper.Collection,您将不得不忽略集合属性并自己映射它们。所以也许再试一次:)
-
我不知道为什么 mapper.collection 从目标集合中删除所有记录并添加新记录。奇怪!
-
你做错了。 AM.Collection 满足您的需求。
标签: c# automapper icollection