取消外键时

时间:2017-08-16 10:16:39

标签: c# automapper

我刚刚开始关注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;
    }
}

1 个答案:

答案 0 :(得分:1)

你必须决定从Guid到Guid到Device的地图。