gpt4 book ai didi

c# - 如何在 Automapper 中从源进行部分映射

转载 作者:行者123 更新时间:2023-12-04 10:41:07 25 4
gpt4 key购买 nike

我试图将对象的 4 个属性中的 2 个映射到目标类型。就我而言 DeletedByDeletedDate ,其中 DeletedDate 将简单地设置为当前的 UTC 日期。

public class DeleteCommand : IRequest
{
public string CodePath { get; set; }

[JsonIgnore]
public Guid? DeletedBy { get; set; }

[IgnoreMap]
public DeleteMode DeleteMode { get; set; } = DeleteMode.Soft;
}

这是我目前的配置:
CreateMap<DeleteCommand, Asset>(MemberList.Source)
.ForMember(x => x.DeletedDate, opt => opt.MapFrom(src => DateTime.UtcNow))
.ForMember(x => x.DeletedBy, opt => opt.MapFrom(src => src.DeletedBy));

针对这个特定的映射器配置运行单元测试给了我 2 个缺少映射的错误:
[Fact]
public void MapperConfigShouldBeValid()
{
_config.AssertConfigurationIsValid();
}

Unmapped properties: DeletedDate DeleteMode



这让我很困惑,因为 Date 是明确定义的,DeleteMode 默认设置为忽略。如果可能,我想避免创建另一个 dto,从第一个 dto 映射到实体,通过设置审计字段进行软删除。

到目前为止我尝试过的事情:
  • IgnoreMapAttribute如上图
  • ForSourceMember() , 似乎不支持源属性的 Ignore 方法。
  • 最佳答案

    这可以通过删除 MemberList.Source 来解决。来自 CreateMap() 的参数列表并忽略所有剩余的未映射目标成员。

    CreateMap<DeleteCommand, Asset>()
    .ForMember(x => x.DeletedDate, opt => opt.MapFrom(src => DateTime.UtcNow))
    .ForMember(x => x.DeletedBy, opt => opt.MapFrom(src => src.DeletedBy))
    .ForAllOtherMembers(x => x.Ignore())

    同样可以通过拥有 CreateMap(MemberList.None) 来实现.这甚至不需要明确忽略所有其他目标成员。

    关于c# - 如何在 Automapper 中从源进行部分映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928393/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com