我有一个SearchService
与Search()
方法,从存储库检索IEnumerable<Search>
。这些对象直接来自LINQ To SQL。接下来,我使用AutoMapper将这些Search
类型转换为SearchModel
类型(例如,稍后将它们传递到控制器中)。AutoMapper:用户特定映射
var searches = searchRepository.GetByUserID(userID);
var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
的问题是,Search
有一个属性DateCreated
这是一个UTC DateTime
。我需要根据登录用户的当地时区更正日期。我能做到这一点与foreach
里面的服务,像这样:
var searches = searchRepository.GetByUserID(userID);
foreach (var search in searches)
{
search.DateCreated = search.DateCreated.ToTimezone(userTimezoneID);
}
var models = Mapper.Map<IEnumerable<Search>, IEnumerable<SearchModel>>(searches);
虽然这工作(可能是唯一的选择),我想利用AutoMapper的IValueFormatter
的。例如,我有一些其他的值格式化器,例如相对时间。
我的问题是:可以这样做吗?我不确定,因为我想我需要将附加信息传递给AutoMapper,以便知道使用哪个时区ID进行转换。我也试图避免从Search
- >User
的关系中获得这个关系,因为当用户登录时(并且希望避免数据库JOIN检索它),我将它存储在cookie中。如何将此时区ID传递给AutoMapper,以便它可以为每个用户执行自定义映射?