AutoMapper перезаписывает вложенное поле пустым - PullRequest
0 голосов
/ 03 мая 2018

У меня есть следующий фрагмент кода, который должен:

  1. Преобразование объекта в dto
  2. Обновить свойство в dto
  3. Преобразовать обратно в сущность
  4. Обновить исходную сущность с обновленными свойствами

Это почти работает, но во время последнего обновления - одно из полей устанавливается в ноль, но к нему не следует прикасаться.

Main:

Entity e = new Entity("Id")
{
    Additional = new EntityAdditional()
    {
        Editable = "Change Me!",
        NotEditable = "Don't Change Me!"
    }
};

Dto dto = Mapper.Map<Dto>(e);

dto.Additional.Editable = "Changed!";

Mapper.Map<Dto, Entity>(dto, e); // e NotEditable is null!

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

config.CreateMap<Entity, Dto>()
    .ForMember(d => d.Additional,
    input => input.MapFrom(i => new DtoAdditional{
        Editable = i.Additional.Editable
    }));

config.CreateMap<Dto, Entity>()
    .ForMember(d => d.Additional,
    input => input.MapFrom(i => new EntityAdditional
    {
        Editable = i.Additional.Editable
    }));

Организация:

public class Entity
{
    public string Id { get; set; }
    public EntityAdditional Additional { get; set; }

    public Entity(string id) {
        Id = id;
        Additional = new EntityAdditional()
        {
            Editable = "Editable",
            NotEditable = "UnEditable"
        };
    }
}

public class EntityAdditional
{
    public string Editable { get; set; }
    public string NotEditable { get; set; }
}

Dto:

public class Dto
{
    public DtoAdditional Additional { get; set; }
}

public class DtoAdditional
{
    public string Editable { get; set; }
}

1 Ответ

0 голосов
/ 03 мая 2018

Это потому что вы указали:

new EntityAdditional
{
    Editable = i.Additional.Editable
//, NotEditable = null // Default value
}));

Нет необходимости настраивать отображение:

Mapper.CreateMap<EntityAdditional, DtoAdditional>()
    .ReverseMap();

Mapper.CreateMap<Entity, Dto>()
    .ReverseMap();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...