我正在尝试使用Automapper的Map函数重载来组合两个对象。一个对象来自数据库,另一个是我的应用程序视图模型。对GetUserPreferences的调用返回键值配对首选项的列表。我宁愿将我的MVC视图绑定到强类型对象,该对象在其构造函数中设置默认首选项。我认为AutoMapper可以帮助解决这个问题。我只需要组合这两个对象。
var dbPreferences = _preferenceManager.GetUserPreferences( HttpContext.User.Identity.Name, Session );
model = Mapper.Map(dbPreferences,model);
根据我的理解,如果我正确设置了映射,我可以完成这项工作。我想要发生的是:
我认为这是用于条件映射的内容。但我总是得到目的地默认值。即使源有值。
我的映射如下:
Mapper.CreateMap<List<UserPreference>, UserPreferencesModel>( )
.ForMember( dest => dest.VerticalResolution,
opt =>
opt.Condition(
src =>
src.SingleOrDefault( p => p.PreferenceName == PreferenceManager.VERTICAL_RESOLUTION_KEY ) != null
) )
.ForMember( dest => dest.GridRows,
opt =>
opt.Condition(
src =>
src.SingleOrDefault(p => p.PreferenceName == PreferenceManager.GRID_ROWS_KEY) != null ));
我知道我可以编写自己的方法来完成所有这些,但我觉得我已经非常接近如何使用AutoMapper。我错过了什么吗?我的src.SingleOrDefault结果永远不会用于映射到非空时。为什么呢?