Я создал сущность домена, и все заданные методы являются частными, поскольку они имеют некоторые проверки перед настройкой данных.
Итак, у меня есть Dtos для обмена данными, и затем я сопоставляю его с сущностью, чтобы я мог сохранить ее в базе данных, если все пойдет хорошо.
При сопоставлении Dto с сущностью я получаю сущность со всеми заполненными свойствами, но SetXXX не выполняются, как это было бы, если бы я вызвал конструктор напрямую.
Каков наилучший или правильный подход для тех случаев, когда используется AutoMapper?
Domain Entity
public Product(Guid id, ... decimal originalPrice, decimal discountedPrice...) :
base(id)
{
OriginalPrice = CheckOriginalPrice(originalPrice, discountedPrice);
DiscountedPrice = CheckDiscountedPrice(originalPrice, discountedPrice);
}
public virtual void SetOriginalPrice(decimal originalPrice, decimal discountedPrice)
{
OriginalPrice = CheckOriginalPrice(originalPrice, discountedPrice);
}
private static decimal CheckOriginalPrice(decimal originalPrice, decimal discountedPrice)
{
if (originalPrice < 0)
throw new ArgumentOutOfRangeException($"original price ({originalPrice} cannot be negative");
else if (originalPrice < discountedPrice)
throw new ArgumentOutOfRangeException($"original price ({originalPrice}) can not be lower than discounted price ({discountedPrice})!");
return originalPrice;
}
Карта будет успешной, если я сделаю это, поэтому проверка не происходит, как вызвать конструктор?
var product = _objectMapper.Map<CreateProductDto, Product>(product);
Если я тестирую класс сущности напрямую, он проходит тест как цена проверена, и я получаю исключение.
var exception = await Assert.ThrowsAsync<ArgumentOutOfRangeException>(async () =>
{
//Act
var product =
new Product(
_guidGenerator.Create(),
...
4.05m,
8.05m,
...
);
});
//Assert
exception.Message.ShouldContain("original price");
Итак, как мне добиться, чтобы при отображении с использованием ObjetMapper.Map конструктор выполнялся правильно, есть ли простой способ выполнить sh