AutoMapper Infinite Loop с использованием EF Code First - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть следующие классы (отношение One-One Asset-TrackingDevice):

public class Asset
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public TrackingDevice TrackingDevice { get; set; }

    }

public class TrackingDevice
    {
        public int Id { get; set; }
        public string Imei { get; set; }
        public int? AssetId { get; set; }
        public Asset Asset { get; set; }
    }

Модели представления очень похожи:

public class AssetViewModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int? TrackingDeviceId { get; set; }
        public TrackingDeviceViewModel TrackingDevice { get; set; }

    }
public class TrackingDeviceViewModel
    {
        public int Id { get; set; }       
        public string Imei { get; set; }
        public AssetViewModel Asset { get; set; }
        public string AssetId { get; set; }
    }

Отображения:

CreateMap<Asset, AssetViewModel>()
                .ForMember(d => d.TrackingDevice, map => map.Ignore());
CreateMap<AssetViewModel, Asset>()
                .ForMember(d => d.TrackingDevice, map => map.Ignore());
CreateMap<AssetViewModel, Asset>()
                .ReverseMap();
CreateMap<TrackingDevice, TrackingDeviceViewModel>()
                .ForMember(d => d.Asset, map => map.Ignore());
CreateMap<TrackingDeviceViewModel, TrackingDevice>()
                .ForMember(d => d.Asset, map => map.Ignore());
CreateMap<TrackingDevice, TrackingDeviceViewModel>()
                .ReverseMap();

Когда я выполняю запрос к базе данных для получения TrackingDevices, я получаю сообщение об ошибке, потому что в сопоставлении актива в устройстве отслеживания также есть устройство отслеживания и т. Д.

Запрос, который я выполняю для полученияУстройство слежения за устройствами:

var trackingDevices = _appContext.TrackingDevices
         .Include(td => td.Asset)
         .ToListAsync();
var trackingMapper = Mapper.Map<IEnumerable<TrackingDeviceViewModel>>(trackingDevices);

Я прочитал, что включение Map.Ignore решило бы проблему, но она тоже не работала, кто-нибудь знает, в чем моя ошибка?

...