TinyMapper将int映射为子类

时间:2019-04-10 21:51:37

标签: c# tinymapper

我正在使用TinyMapper将类Log映射到LogViewModel

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从Log映射到LogViewModel时。如果我使用默认绑定

TinyMapper.Bind<Log, LogViewModel>();

并在控制器中:

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

除了Level以外,所有值都填充得很好,即使Log.LevelId不是,它也为null。当我尝试将LevelId映射到Level.Id时,这仍然只为Level提供了空值。

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以编写自定义资料夹:https://github.com/TinyMapper/TinyMapper/wiki/Custom-mapping。虽然那样的话,您一开始就失去了重点...

我会考虑使用AutoMapper来更轻松地处理这样的事情:https://automapper.org/