Как игнорировать отсутствующие свойства в AutoMapper во время запросов на обновление? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Как игнорировать отсутствующие свойства в AutoMapper во время запросов на обновление? [дубликат]

Сообщение Anonymous »

Я работаю над функцией обновления для моего класса ShopOffer. При обновлении я хочу игнорировать свойства, которые не включены в запрос на обновление (т. е. те, которые имеют значение NULL). Однако некоторые свойства, такие как DiscountPercentage и TimesOfUsage, по-прежнему сопоставляются со значениями по умолчанию (например, 0 или false), когда они имеют значение null в UpdateShopOfferRequestDto.
Вот мои классы и настройки сопоставления:
Вот мои классы и настройки сопоставления:

Код: Выделить всё

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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»