Получение предыдущего значения поля в обработчике события EntityUpdatingEventData <TEntity> - PullRequest
0 голосов
/ 11 сентября 2018

Я пытался реализовать универсальный обработчик событий, который будет запускаться при изменении объекта.Это делается с помощью 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);
        }

    }

Любая помощь будет принята с благодарностью.Спасибо!

...