C# Automapper集合映射:如何确定对象是否已更新或创建

C# Automapper集合映射:如何确定对象是否已更新或创建,c#,automapper,C#,Automapper,我有以下代码 公共级AAA { 公共int Id{get;set;} } 公共类BBB { 公共int Id{get;set;} public int UpdatedOrCreated{get;set;} } [测试方法] 公共void MappingTest2() { var\u mapperConfiguration=新的mapperConfiguration(cfg=> { cfg.AddCollectionMappers(); CreateMap(MemberList.Destinati

我有以下代码

公共级AAA
{
公共int Id{get;set;}
}
公共类BBB
{
公共int Id{get;set;}
public int UpdatedOrCreated{get;set;}
}
[测试方法]
公共void MappingTest2()
{
var\u mapperConfiguration=新的mapperConfiguration(cfg=>
{
cfg.AddCollectionMappers();
CreateMap(MemberList.Destination)
.EqualityComparison((a,b)=>a.Id==b.Id)
.ForMember(dest=>dest.Id,src=>src.MapFrom(m=>m.Id))
.FormMember(dest=>dest.UpdatedOrCreated,/*设置值2表示已更新,设置值3表示已创建*)
.ForAllOtherMembers(m=>m.Ignore());
});
_mapperConfiguration.AssertConfigurationsValid();
var mapper=_mapperConfiguration.CreateMapper();
var varin=新列表
{
新AAA
{
Id=1,
},
新AAA
{
Id=2,
}
};
var varout=新列表
{
新BBB
{
Id=1,
}
};
var ttt=mapper.Map(varin,varout);
ttt.Should().HaveCount(2);
ttt[0].Id.Should().Be(1);
ttt[0]。UpdatedOrCreated.Should().Be(2);
ttt[1].Id.Should().Be(2);
ttt[1].UpdatedOrCreated.Should().Be(3);
}
我正在使用Automapper集合扩展,希望根据创建的新对象或更新的现有对象设置字段“UpdatedOrCreated”。
我还没有找到这样做的方法。

我希望这可以在不监视其他值的情况下完成,而只是通过检查是否构造了新对象(不知何故),我在MapperConfiguration.ForAllOtherMembers(m=>m.Ignore());。此行忽略ValueA PROPERTY I从示例中删除了ValueA。Automapper集合不创建新对象,它只在目标列表中插入旧对象引用,您可以对目标使用自定义列表模型,并在启动Add方法时进行检测。选中编辑的应答抱歉,但它会创建新对象。在本例中,它创建了一个Id为2的新BBB对象。当发现现有对象时,它将重用该对象,否则它将创建一个新对象。
public class AAA
{
    public int Id { get; set; }
    public string ValueA { get; set; }
}

public class BBB
{
    public int UpdatedOrCreated { get; set; } = 2;
    public int Id { get; set; }
    public string ValueA { get; set; }
}

public class CustomList : List<BBB>
{
    public new void Add(BBB item)
    {
        item.UpdatedOrCreated = 3;
        base.Add(item);
    }
}
var varout = new CustomList
{
    new BBB
    {
        Id = 1,
        ValueA = "bang"
    }
};