Глубокое клонирование через Automapper, игнорирующее определенное свойство из иерархии

У меня довольно простой вопрос относительно определения карт 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 ответ

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

Другие вопросы по тегам