Я пытался реализовать универсальный обработчик событий, который будет запускаться при изменении объекта.Это делается с помощью EntityUpdatingEventData<TEntity>
, однако проблема заключается в том, что при изменении поля на объекте мне также необходимо знать предыдущее значение поля.Моя идея состояла в том, чтобы снова запросить эту сущность, однако, хотя данные еще не сохранены с EntityUpdatingEventData<TEntity>
, все это происходит в той же единице работы, и уже существует запрос ОБНОВЛЕНИЕ для сущности перед моим запросом SELECTдля этого.Поэтому я вижу только обновленное значение поля, а не предыдущее значение.Есть ли способ обойти это или какое-то альтернативное решение?Или мне придется напрямую реализовать это в службах приложений?(Я пытался избежать этого, потому что поля могли быть изменены в нескольких местах по нескольким причинам)
Вот мой код:
public class ContainerDetailsEventHandler : IEventHandler<EntityUpdatingEventData<Container>>, ITransientDependency
{
public ILogger Logger { get; set; }
private readonly IRepository<Container> _containerRepository;
public ContainerDetailsEventHandler(
IRepository<Container> containerRepository
)
{
Logger = NullLogger.Instance;
_containerRepository = containerRepository;
}
// TODO - Placeholder implementation
public void HandleEvent(EntityUpdatingEventData<Container> eventData)
{
// I'm trying to get the previous, unsaved entity here
// But instead it already has the updated values
var container = _containerRepository.FirstOrDefault(eventData.Entity.Id);
Logger.Debug("Fetched container: " + container);
if (container.ContainerConditionId != eventData.Entity.ContainerConditionId)
{
// We never get here
Logger.Debug("Container condition was changed from " + container.ContainerConditionId + " to " + eventData.Entity.ContainerConditionId);
}
}
Любая помощь будет принята с благодарностью.Спасибо!