gpt4 book ai didi

c# - 如何在不使用 AutoMapper 为覆盖属性的每个派生类显式映射的情况下映射虚拟属性?

转载 作者:行者123 更新时间:2023-11-30 18:06:56 25 4
gpt4 key购买 nike

我正在使用 AutoMapper 将我的实体映射到 DTO。我的一些实体具有可能被派生实体覆盖的虚拟属性。我正在使用定义虚拟属性的基类映射虚拟属性。但是,在映射派生类时,AutoMapper 映射虚拟属性的基本实现而不是重写的实现。

我将从类定义开始:

public class BaseType
{
public virtual string Title
{
get { return string.Empty; }
}
}

public class DerivedType : BaseType
{
public override string Title
{
get { return Name; }
}

public string Name { get; set; }
}

public class BaseTypeDto
{
public string Title { get; set; }
}

public class DerivedTypeDto : BaseTypeDto
{
public string Name { get; set; }
}

现在进行映射配置:

CreateMap<BaseType, BaseTypeDto>()
.ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-"))
.Include<DerivedType, DerivedTypeDto>();

CreateMap<DerivedType, DerivedTypeDto>()

最后是映射:

DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance);

当我将 Title 映射放在配置派生类型的 CreateMap 调用上时,它起作用了。但由于我有大约 20 个派生类型,我真的希望在基类上配置 Title 映射,而不必为每个派生类重复它。

AutoMapper 可以吗?

最佳答案

你不能使用 ConstructUsing() 选项吗?这将允许您一直有一个委托(delegate)映射到基类对象?

CreateMap<basetype, baseTypeDto>()
.ConstructUsing(y => base.title = basetype.title);

关于c# - 如何在不使用 AutoMapper 为覆盖属性的每个派生类显式映射的情况下映射虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4359852/

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