首页 > 解决方案 > TinyMapper 将 int 映射到子类

问题描述

我正在使用 TinyMapper 从一个类映射LogLogViewModel.

public class Log
{
  //.... bunch of properties here 
  public int LevelId {get; set;}
}

public class LogViewModel
{
  //.... bunch of properties here 
  public LogLevelViewModel Level {get; set;}
}

public class LogLevelViewModel
{
  public int Id {get; set;}
  public string Name {get; set;}
}

有一个枚举,Level但我们使用视图模型LogLevelViewModel来包含IdName对应于枚举的值和名称。在数据库中,Log具有LevelId枚举值的字段。

我遇到的问题是当我尝试使用 TinyMapper 映射 fromLogLogViewModel. 如果我使用默认绑定

TinyMapper.Bind<Log, LogViewModel>();

在控制器中:

var data = TinyMapper.Map<List<LogViewModel>>(logs);

除了 之外,所有值都填充得很好Level,即使Log.LevelId不是,它也为空。当我尝试将 映射LevelIdLevel.Idthis 时,它仍然只为Level.

TinyMapper.Bind<Log, LogViewModel>(config =>
{
  config.Bind(src => src.LevelId, dest => dest.Level.Id);
});

理想情况下,我需要从 int 绑定LevelId并直接填充Level.IdandLevel.Name值,但如果我至少可以获取那里的Level.Id值就足够了。有谁知道如何做到这一点?

旁注:我确实尝试了一些其他的绑定变体,但我得到的只是一个错误"System.ArgumentException: 'Expression is not a MemberExpression'"

标签: c#tinymapper

解决方案


您可以编写自定义活页夹:https ://github.com/TinyMapper/TinyMapper/wiki/Custom-mapping 。虽然你一开始有点失去意义......

我会考虑 AutoMapper,它可以更轻松地处理这样的事情:https ://automapper.org/


推荐阅读