我正在使用实体框架为IT帮助请求创建一个票务系统。 客户端应用程序只是将一个新行插入一个名为Requests的表中,其中包含请求的描述等。 我希望票证管理器应用程序能够从数据库中读取这些内容,并在将新请求插入数据库时进行更新。
我在这里做了一个例子,并修改了一下代码: SqlDependency with EntityFramework 6 (async)
public MainWindow()
{
InitializeComponent();
var data1 = WaitForRequestList();
Task.WaitAll(data1); // This never finishes
List<Request> list = data1.Result;
MessageBox.Show(list.ToString()); // So this never pops up
}
async Task<List<Request>> WaitForRequestList()
{
using (HelpDeskTicketingEntities context = new HelpDeskTicketingEntities()) // subclass of DbContext
{
SqlDependency.Start(context.Database.Connection.ConnectionString);
SqlDependency dependency = new SqlDependency();
dependency.OnChange += (sender, e) =>
{
Console.Write(e.ToString()); // This prints once, but does not on subsequent inserts
};
Task<List<Request>> task = Task<Task<List<Request>>>.Factory.StartNew(async () =>
{
System.Runtime.Remoting.Messaging.CallContext.SetData("MS.SqlDependencyCookie", dependency.Id);
return await context.Requests.Where(r => r.status == "Open").ToListAsync();
}).Unwrap();
return await task;
}
}
但我看到的问题是请求列表永远不会构建。 ToListAsync()永远不会完成。
任何人都知道什么是错的?
此外,我希望SqlDependancy始终关注更改,而不是仅仅工作一次。但是,如果我能解决以前的问题,我想我能搞清楚。