AutoMapper - 从链接源 table 中检索与链接源不同的字段

AutoMapper - Retrieve a different field from a linked source table than the one that links it

我有以下 table 结构,它混合了遗留字段和更新的架构:

Coaster
  Id (Int)
  ParkId (Int)

Park
  Id (int)
  UniqueId (Guid)

因此,Coaster 和 Park table 是使用 Park.Id 字段 linked 的。 UniqueId 字段当前未在旧架构中使用。我们正在使用 AutoMapper 迁移到干净的数据库,这个新模式如下所示:

Coaster
  Id (Int)
  ParkId (Guid)

Park
  Id (Guid)

我遇到的问题是使用 AutoMapper 执行此操作。我一直在试验这段代码:

private ModelMapper()
{
    Mapper.Initialize(x =>
    {
        x.AddProfile<ConvertersMappingProfile>();
    });
}

    // This is the part that I'm trying to work out
    public ConvertersMappingProfile()
    {
            CreateMap<Park, NewSchema.Park>()
                .ForMember(dst => dst.Id, map => map.MapFrom(src => src.ParkId));
    }

在新架构中,Park table 的 ID 与旧架构的 UniqueId 匹配。

我的问题是:因为在旧模式中没有直接 link 到公园 table 的 UniqueId 值,我如何获取该值以映射到新模式使用Coaster.ParkId 字段到 Park.Id 字段映射?

我使用了自定义解决方案来解决问题。所以我创建了我的解析器,它提取数据库中的项目列表(通常很小)以从我需要的 table 中获取所有值,并检索值。 (Pre-refactored 代码):

public class ParkResolver : IValueResolver<Original.Park, New.Park, string> {
    public string Resolve(Original.Park source, New.Park dest, string destMember, ResolutionContext context) {

        List<Original.Park> list = new List<Original.Park>();

        using (IDbConnection con = new SQLiteConnection(@"Data Source=C:\Users\Me\Documents\Parks.sql;")) {
            con.Open();
            list = con.Query<Original.Park>($"SELECT * FROM Parks WHERE Id = {source.ParkId}").ToList();
            con.Close();
        }

        return list.FirstOrDefault().UniqueId;
    }
}

我为正在映射的 table 调用我的自定义解析器:

        CreateMap<Original.Park, New.Park>()
            .ForMember(dst => dst.ParkId, map => map.MapFrom(new ParkResolver()));

希望这会对其他人有所帮助。