c# - TinyMapper 将 int 映射到子类
问题描述
我正在使用 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 映射 fromLog
到LogViewModel
. 如果我使用默认绑定
TinyMapper.Bind<Log, LogViewModel>();
在控制器中:
var data = TinyMapper.Map<List<LogViewModel>>(logs);
除了 之外,所有值都填充得很好Level
,即使Log.LevelId
不是,它也为空。当我尝试将 映射LevelId
到Level.Id
this 时,它仍然只为Level
.
TinyMapper.Bind<Log, LogViewModel>(config =>
{
config.Bind(src => src.LevelId, dest => dest.Level.Id);
});
理想情况下,我需要从 int 绑定LevelId
并直接填充Level.Id
andLevel.Name
值,但如果我至少可以获取那里的Level.Id
值就足够了。有谁知道如何做到这一点?
旁注:我确实尝试了一些其他的绑定变体,但我得到的只是一个错误"System.ArgumentException: 'Expression is not a MemberExpression'"
。
解决方案
您可以编写自定义活页夹:https ://github.com/TinyMapper/TinyMapper/wiki/Custom-mapping 。虽然你一开始有点失去意义......
我会考虑 AutoMapper,它可以更轻松地处理这样的事情:https ://automapper.org/