Глубокое клонирование через 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, чтобы сделать это. Он выполняет глубокое клонирование и может игнорировать по имени свойства, которое, по-видимому, является тем, что вы ищете.