Глубокое клонирование через Automapper, игнорирующее определенное свойство из иерархии - PullRequest
0 голосов
/ 24 ноября 2018

У меня довольно простой вопрос относительно Automapper определения отображения.Я собираюсь глубоко клонировать объект с помощью Automapper , игнорируя свойство 'Id', поэтому я выбрал его для настройки отображения.

public interface IEntity<T>
{
    T Id { get; }
}

public abstract class Entity : IEntity<Guid>
{
    public Guid Id { get; set; }
}

Все мои объекты получены изEntity класса, и я просто хочу игнорировать все свойства Id во вложенной иерархии моего объекта, не будучи настолько явным в определении отображения.

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

public static T AutomapperClone<T>(this T source)
    where T : IEntity<Guid>
{
    var config = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<T, T>()
            .ForMember(d => d.Id, o => o.Ignore());
    });
    // checking configuration validity
    config.AssertConfigurationIsValid();
    // creating mapper
    var mapper = config.CreateMapper();
    var copy = mapper.Map<T, T>(source);
    return copy;
}

Идея состоит в том, что все сущности получают новый идентификатор вместо того, чтобы использовать одни и те же сопоставленные.Это достижимо через Automapper?

Благодарим вас за отзыв.

1 Ответ

0 голосов
/ 29 ноября 2018

Я бы не использовал Automapper для этого человека, попробуйте AnyClone , чтобы сделать это.Он выполняет глубокое клонирование и может игнорировать по имени свойства, которое, по-видимому, является тем, что вы ищете.

...