我正在使用 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
一种方法完成,然后调用第二种方法,它们都会按预期收到更改通知。有什么解决办法吗?