Вот мои классы и настройки сопоставления:
Вот мои классы и настройки сопоставления:
Код: Выделить всё
public class ShopOffer
{
public required string Code { get; set; }
public required double DiscountPercentage { get; set; }
public bool Active { get; set; } = false;
public required DateTime StartDate { get; set; }
public required DateTime EndDate { get; set; }
[NotMapped]
public string? Type { get; set; }
}
Код: Выделить всё
public class UserSpecificShopOffer : ShopOffer
{
public required string UserId { get; set; }
public AppUser? User { get; set; }
public required int TimesOfUsage { get; set; }
}
Код: Выделить всё
public class UpdateShopOfferRequestDto
{
public double? DiscountPercentage { get; set; } = null;
public bool? Active { get; set; } = null;
public DateTime? StartDate { get; set; } = null;
public DateTime? EndDate { get; set; } = null;
public int? TimesOfUsage { get; set; } = null;
}
Код: Выделить всё
CreateMap()
.IncludeBase() // Reuse base mapping
.ForAllMembers(opts =>
opts.Condition((src, dest, srcMember) => srcMember != null));
CreateMap()
.ForAllMembers(opts =>
opts.Condition((src, dest, srcMember) => srcMember != null)); // Only map non-null source properties
Код: Выделить всё
public async Task Update(Guid id, UpdateShopOfferRequestDto offerDto)
{
var offer = await shopOfferRepository.GetByIdAsync(id);
if (offer == null) {
return ServiceResult.BadRequest("Offer doesn't exist");
}
mapper.Map(offerDto, offer);
shopOfferRepository.Update(offer);
var result = await shopOfferRepository.SaveAsync();
if (result opts.Condition(...)) для сопоставления только ненулевых свойств, я все равно получаю значения по умолчанию для таких свойств, как DiscountPercentage и TimesOfUsage. Они сопоставляются с 0, а не остаются неизменными, когда исходное значение равно нулю.
[b]Что я пробовал[/b]:
Я использовал .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null)) в своем профиле сопоставления, чтобы избежать сопоставления нулевых значений.
Я попробовал оба варианта. включая и исключение IncludeBase для класса ShopOffer.
[b]Ожидаемое поведение[/b]:
Я хочу, чтобы нулевые свойства в UpdateShopOfferRequestDto игнорировались во время сопоставления это означает, что в целевом объекте (UserSpecificShopOffer или ShopOffer) следует обновлять только те свойства, которые не имеют значения NULL.
Подробнее здесь: [url]https://stackoverflow.com/questions/79283812/how-to-ignore-missing-properties-in-automapper-during-update-requests[/url]
Мобильная версия