Automapper - 如何实现查找
Automapper - How to implement a lookup
我有一些遗留代码。此代码将一种地址类型映射到另一种地址类型。例如,我有一个如下所示的语句:
CreateMap<SourceAddress, DestinationAddress>()
.ForMember(a => a.State, opt => opt.MapFrom(a => a.State.Name));
以上代码有效。然而,基础 API(即 SourceAddress
)已经改变。在更新的 API 中,State
属性 不再存在。相反,有一个 StateId
属性。但是,我仍然需要将状态名称映射到 DestinationAddress
.
中的 属性
我的问题是,有没有办法在 AutoMapper 的映射语句中实现查找?
更新:包括原始 SourceAddress
模型、更新的 SourceAddress
模型和 DestinationAddress
模型
SourceAddress (original)
------------------------
Id
State (object)
City (string)
SourceAddress (modified)
------------------------
Id
StateId (int)
City (string)
DestinationAddress
------------------
Id
State (string)
City (string)
我的目标是将 SourceAddress
对象中的状态名称映射到 DestinationAddress
对象中的 State
属性。不知何故,我需要使用 StateId
值进行查找(即,根据 StateId 值从 State 对象获取状态名称)。
尝试使用转换器。
状态列表可以通过依赖注入来检索,因为它们不会经常改变,而且你不会每次都从数据库中select这个列表。
public class Converter : ITypeConverter<SourceAddress, DestinationAddress>
{
private readonly IList<State> _states;
public Converter (IList<State> states)
{
_states = states;
}
public DestinationAddress Convert(SourceAddress source, DestinationAddress destination, ResolutionContext context)
{
destination.State = _states.Single(x => x.Id == source.StateId).Name;
return destination;
}
}
并使用转换器创建映射
CreateMap<SourceAddress, DestinationAddress>()
.ForMember(a => a.State, opt => opt.MapFrom<Converter>());
https://docs.automapper.org/en/stable/Custom-type-converters.html
我有一些遗留代码。此代码将一种地址类型映射到另一种地址类型。例如,我有一个如下所示的语句:
CreateMap<SourceAddress, DestinationAddress>()
.ForMember(a => a.State, opt => opt.MapFrom(a => a.State.Name));
以上代码有效。然而,基础 API(即 SourceAddress
)已经改变。在更新的 API 中,State
属性 不再存在。相反,有一个 StateId
属性。但是,我仍然需要将状态名称映射到 DestinationAddress
.
我的问题是,有没有办法在 AutoMapper 的映射语句中实现查找?
更新:包括原始 SourceAddress
模型、更新的 SourceAddress
模型和 DestinationAddress
模型
SourceAddress (original)
------------------------
Id
State (object)
City (string)
SourceAddress (modified)
------------------------
Id
StateId (int)
City (string)
DestinationAddress
------------------
Id
State (string)
City (string)
我的目标是将 SourceAddress
对象中的状态名称映射到 DestinationAddress
对象中的 State
属性。不知何故,我需要使用 StateId
值进行查找(即,根据 StateId 值从 State 对象获取状态名称)。
尝试使用转换器。 状态列表可以通过依赖注入来检索,因为它们不会经常改变,而且你不会每次都从数据库中select这个列表。
public class Converter : ITypeConverter<SourceAddress, DestinationAddress>
{
private readonly IList<State> _states;
public Converter (IList<State> states)
{
_states = states;
}
public DestinationAddress Convert(SourceAddress source, DestinationAddress destination, ResolutionContext context)
{
destination.State = _states.Single(x => x.Id == source.StateId).Name;
return destination;
}
}
并使用转换器创建映射
CreateMap<SourceAddress, DestinationAddress>()
.ForMember(a => a.State, opt => opt.MapFrom<Converter>());
https://docs.automapper.org/en/stable/Custom-type-converters.html