SqlDependency с EntityFramework 6 (асинхронный)
Я использую EF 6async
запрашивая функции, такие как
var list = await cx.Clients.Where(c => c.FirstName.Length > 0).ToListAsync();
Я хочу также запустить зависимости SQL от этих запросов, чтобы получать уведомления при изменении данных в базе данных. Я могу сделать это с помощьюSystem.Runtime.Remoting.Messaging.CallContext
следующее:
async Task GetData()
{
using (ClientsContext context = new ClientsContext()) // subclass of DbContext
{
SqlDependency.Start(context.Database.Connection.ConnectionString);
SqlDependency dependency = new SqlDependency();
dependency.OnChange += (sender, e) =>
{
Console.Write(e.ToString());
};
System.Runtime.Remoting.Messaging.CallContext.SetData("MS.SqlDependencyCookie", dependency.Id);
var list = await context.Clients.Where(c => c.FirstName.Length > 0).ToListAsync();
}
}
.. и работает нормально. Но я сталкиваюсь с проблемой, если я хочу иметьSqlDependency
на более чем один запрос. Если у меня есть дваasync
методы, похожие наGetData()
выше, и я запускаю оба одновременно, только первое получит уведомления об изменениях. Я предполагаю, что это связано с тем, что CallContext имеет cookie, установленный каждым методом подряд. Если я жду первогоasync
завершите метод, затем вызовите второй, они оба получат уведомления об изменениях, как и ожидалось. Есть ли какое-то решение этого?