最近我更新了 automapper 5+ 版本,并意识到 IValueresolver 对于 Nullable 类型的 Guid 无法正常工作。
我创建了一个值解析器,如下所示:
public class GanttTaskParentIdResolver : IValueResolver<GanttTask, Task, Guid?>
{
private IUow Uow;
public GanttTaskParentIdResolver(IUow _uow)
{
Uow = _uow;
}
public Guid? Resolve(GanttTask source, Task destination, Guid? member, ResolutionContext context)
{
if (source.parentIdRaw != null && source.parentIdRaw != 0)
{
var task = Uow.Tasks.GetAll().Where(con => con.Id == source.parentIdRaw).FirstOrDefault();
return task.GUID;
}
else return null;
}
}
和映射配置如下:
cfg.CreateMap<GanttTask, Task>()
.IgnoreAllNonExisting()
.ForMember(dst => dst.Children, opt => opt.MapFrom(s => s.Children))
.ForMember(dst => dst.ParentId, opt => opt.ResolveUsing<GanttTaskParentIdResolver>())
.ForMember(dst => dst.CalendarId, opt => opt.ResolveUsing<GanttTaskCalendarIdResolver>());
dst.ParentId 是 Nullable Guid。它不会触发 GanttTaskParentIdResolver 进行解析,并且始终为 ParentId 提供 null。
有人遇到过同样的问题吗?
更新 - 我测试了可为空的 int 并且它有效。可以为空的 Guid 似乎有问题