Entity Framework Core 2.1, ChangeTracker.Tracked - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь выяснить, как использовать Entity Framework Cores 2.1 new Событие ChangeTracker.Tracked для подключения к запросам на чтение.К сожалению, я не могу понять, как это реализовать.Поскольку это новая функция, на ней невозможно найти какие-либо статьи, а официальный сайт документации Microsoft не предоставляет никакой помощи или примеров кода.Мой сценарий довольно прост.У меня есть база данных со следующими столбцами: id, customerId, метаданные. Когда пользователь запрашивает эту таблицу, я хочу перехватить набор результатов запроса и для каждой строки я хочу сравнить customerId с текущим вошедшим пользователем,Я надеюсь, что Событие ChangeTracker.Tracked может помочь мне перехватить набор возвращаемых результатов.Я ищу пример кода о том, как достичь выше.

1 Ответ

0 голосов
/ 27 июня 2018

Вот пример использования события ChangeTracker.Tracked.

Добавьте следующий метод в свой контекст (требуется using Microsoft.EntityFrameworkCore.ChangeTracking;):

void OnEntityTracked(object sender, EntityTrackedEventArgs e)
{
    if (e.FromQuery && e.Entry.Entity is YourEntityClass)
    {
        var entity = (YourEntityClass)e.Entry.Entity;
        bool isCurrentUser = entity.customerId == CurrentUserId;
            // do something (not sure what)
    }
}

и присоедините его к ChangeTracker.Tracked даже в вашем конструкторе контекста:

ChangeTracker.Tracked += OnEntityTracked;

Как описано в Tracked событие документация :

Событие, возникающее при отслеживании объектаконтекстом, либо потому, что он был возвращен из запроса отслеживания, либо потому, что он был присоединен или добавлен к контексту.

Некоторые вещи, которые следует упомянуть.

  • Событие не сработало для запросов без отслеживания

  • Событие сработало для каждого экземпляра объекта, созданного набором результатов запроса отслеживанияи еще не отслеживается контекстом

  • Свойство bool FromQuery аргументов события используется, чтобы отличить, происходит ли событие из процесса материализации запроса отслеживания или с помощью кода пользователя (Attach, Add и т. Д. Звонки).

  • Свойство EntityEntry EntryАргументы событий дают вам доступ к экземпляру сущности и другой связанной информации (в основном, к той же информации, которую вы получаете при вызове неуниверсального метода DbContext.Entry)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...