[英]Using Automapper to change Collection
我在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,如下所示:
var mapper = new MapperConfiguration(
cfg =>
{
cfg.AddCollectionMappers();
cfg.CreateMap<MakeDto, Make>()
.EqualityComparison((src, dst) => src.Id == dst.Id);
cfg.CreateMap<Model, Model>()
.ForMember(x => x.Make, opt => opt.Ignore())
.EqualityComparison((src, dst) => src.Id == dst.Id);
})
.CreateMapper();
mapper.Map<MakeDto, Make>(makeDto, make);
await _unitOfWork.CompleteAsync();
也有興趣的話,請看這個鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.