Обычно я подключаюсь либо к службе, создающей транзакцию, либо к событию Сохранить изменения, например @Vince. Однако из-за вашего нового требования
проблема заключается в следующем: у меня нет этого контроля надsdk, который переводит транзакции студентов в db, поэтому я надеюсь, что есть какой-то способ работать непосредственно над таблицей db.
В вашем случае вы можете просто просмотреть таблицу, используя зависимости SQL
Примечание: будьте осторожны, используя SqlDependency класс - у него проблемы с утечками памяти.
using(var tableDependency = new SqlTableDependency<Transaction>(conString))
{
tableDependency.OnChanged += TableDependency_Changed;
tableDependency.Start();
}
void TableDependency_Changed(object sender, RecordChangedEventArgs<Transaction> e)
{
if (e.ChangeType != ChangeType.None)
{
var changedEntity = e.Entity;
//You'll need to change this logic to send only to the people you want to
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notifyClients(entity);
}
}
Редактировать Кажется, у вас могут быть другие зависимости, например, вы хотите включить в свои результаты. Итак, что вы можете сделать, это разрешить Id из сущности, а затем вызвать Get используя EntityFramework.
if (e.ChangeType != ChangeType.None)
{
var changedEntity = e.Entity;
var id = GetPrimaryKey(changedEntity)
_ctx.Transactions.Find(id);
}
Edit Другие методы подхода.
Если у ваших сущностей есть последнее обновленное поле, вы можете сканировать изменения в таблице по таймеру. У клиента есть таймер, по истечении которого он отправляет последний раз, когда проверял изменения. Сервер получает все объекты, у которых время последнего обновления больше, чем время, прошедшее в
Хотя у вас нет доступа к EF, у вас, вероятно, есть доступ к сетиAPI-запросы. Когда кто-то вызывает метод обновления или создания, просто захватите идентификатор измененного объекта, вставьте все идентификаторы объектов, измененных в фоновую службу, которая будет отправлять уведомления сигнализатора,
единственной проблемой сейчас является получение первичного ключа, что можно сделать с помощью ручного сопоставления типов с их свойством id, или это можно сделать с использованием метаданных из модели, но это немного сложнее
Обратите внимание, что вы, вероятно,можно изменить так, чтобы он работал в общем случае на всех таблицах