Вот пример использования события 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
)