Я попытался много искать и попробовать разные варианты, но ничего не работает.AutoMapper: сохранить значение назначения, если свойство не существует в источнике
Я использую ASP.net Identity 2.0, и у меня есть UpdateProfileViewModel. При обновлении информации о пользователе я хочу сопоставить модуль UpdateProfileViewModel с ApplicationUser (т. Е. Модель идентификации); но я хочу сохранить значения, которые я получил из db для пользователя. то есть имя пользователя & Адрес электронной почты, который не нуждается в изменении.
Я пытался делать:
Mapper.CreateMap<UpdateProfileViewModel, ApplicationUser>()
.ForMember(dest => dest.Email, opt => opt.Ignore());
, но я все еще получаю Email утратившим после отображения:
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
user = Mapper.Map<UpdateProfileViewModel, ApplicationUser>(model);
Я также попытался это, но не работает:
public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
var sourceType = typeof(TSource);
var destinationType = typeof(TDestination);
var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(sourceType) && x.DestinationType.Equals(destinationType));
foreach (var property in existingMaps.GetUnmappedPropertyNames())
{
expression.ForMember(property, opt => opt.Ignore());
}
return expression;
}
и затем:
Mapper.CreateMap<UpdateProfileViewModel, ApplicationUser>()
.IgnoreAllNonExisting();
Try «UseDestinationValue» вместо «Игнорировать» –
Это еще остается неизменным в объекте пользователя. –