using System.Collections.Generic;
using AutoMapper.EquivalencyExpression;
public Guid Id { get; set; }
public ICollection<BottomEntity> Bottoms { get; set; }
public class BottomEntity
public Guid Id { get; set; }
public DateTime Begin {get;set;}
public Guid TopId { get; set; }
public class TopEntityViewModel
public Guid Id { get; set; }
public ICollection<BottomEntityViewModel> Bottoms { get; set; }
public class BottomEntityViewModel
public Guid Id { get; set; }
public DateTime Begin {get;set;}
public static void Main()
var mapperConfig = new MapperConfiguration(exp =>
exp.AddCollectionMappers();
exp.CreateMap<TopEntity, TopEntityViewModel>();
exp.CreateMap<BottomEntity, BottomEntityViewModel>();
exp.CreateMap<TopEntityViewModel, TopEntity>();
exp.CreateMap<BottomEntityViewModel, BottomEntity>()
.ForMember(dest => dest.TopId, opts => opts.Ignore())
.EqualityComparison((src, dest) => src.Begin == dest.Begin)
mapperConfig.AssertConfigurationIsValid();
var mapper = mapperConfig.CreateMapper();
var topEntityId = Guid.NewGuid();
var bottomEntityId1 = Guid.NewGuid();
var bottomEntityId2 = Guid.NewGuid();
var topEntity = new TopEntity
Bottoms = new List<BottomEntity>
Begin = new DateTime(2023,8,8),
Begin = new DateTime(2023,8,7),
var topEntityVm = new TopEntityViewModel
Bottoms = new List<BottomEntityViewModel>
new BottomEntityViewModel
new BottomEntityViewModel
Begin = new DateTime(2023,8,8),
var updatedTopEntity = mapper.Map(topEntityVm, topEntity);
Console.WriteLine(updatedTopEntity.Bottoms.ElementAt(0).TopId);
Console.WriteLine(updatedTopEntity.Bottoms.ElementAt(1).TopId);
Console.WriteLine(updatedTopEntity.Bottoms.Count());
Console.WriteLine(updatedTopEntity == topEntity);