我刚刚开始关注AutoMapper并希望改变一种特定的行为。
我有一个简单的视图模型,其中包含我想使用自定义转换器转换的外键。然而,我的问题是,除非我将视图模型中的属性命名为类型名称,否则我无法使其工作。
以下代码可以正常工作,但我更愿意在DeviceTemperatureEntryViewModel DeviceId中命名Guid而不是仅仅设备。如果我将其命名为DeviceId,那么unflattening工作,导致设置类型ID设置正确,但不调用自定义转换器。
public MappingProfile()
{
CreateMap<Device, DeviceViewModel>().ReverseMap();
CreateMap<DeviceTemperatureEntry, DeviceTemperatureEntryViewModel>().ReverseMap();
// Lookups
CreateMap<Guid, Device>().ConvertUsing<EntityConverter<Device>>();
}
public class EntityConverter<T> : ITypeConverter<Guid, T> where T : class
{
private readonly ApplicationDbContext _context;
public EntityConverter(ApplicationDbContext context)
{
_context = context;
}
public T Convert(Guid source, T destination, ResolutionContext context)
{
return _context.Find<T>(source);// default(T);
}
}
public class DeviceTemperatureEntryViewModel
{
public Guid Id { get; set; }
public Guid Device { get; set; }
public double Temperature { get; set; }
}
public class DeviceTemperatureEntry : DeviceEntry
{
public double Temperature { get; set; }
}
public class DeviceEntry
{
[Key]
public Guid Id { get; set; }
[Required]
public DateTime Timestamp { get; set; }
public Device Device { get; set; }
public DeviceEntry()
{
Timestamp = DateTime.Now;
}
}
答案 0 :(得分:1)
你必须决定从Guid到Guid到Device的地图。