我正在使用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
来包含与该枚举的值和名称相对应的Id
和Name
。在数据库中,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.Id
和Level.Name
值,但是如果我至少可以在那里获得Level.Id
值这样就足够了。有人知道如何做到这一点吗?
旁注:我确实在绑定上尝试了其他几种变体,但我得到的只是一个错误"System.ArgumentException: 'Expression is not a MemberExpression'"
。
答案 0 :(得分:0)
您可以编写自定义资料夹:https://github.com/TinyMapper/TinyMapper/wiki/Custom-mapping。虽然那样的话,您一开始就失去了重点...
我会考虑使用AutoMapper来更轻松地处理这样的事情:https://automapper.org/