У меня есть две модели в 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();
});
}