C# 在EF6中插入db时通知

C# 在EF6中插入db时通知,c#,database,entity-framework-6,C#,Database,Entity Framework 6,我正在使用实体框架为IT帮助请求创建一个票务系统。 客户端应用程序只需在名为Requests的表中插入一个新行,其中包含请求的描述等。 我希望ticket manager应用程序能够从数据库中读取这些数据,并在将新请求插入数据库时进行更新 我在这里遵循了一个示例,并稍微修改了代码: public主窗口() { 初始化组件(); var data1=WaitForRequestList(); Task.WaitAll(data1);//这永远不会结束 列表=数据1.结果; MessageBox.

我正在使用实体框架为IT帮助请求创建一个票务系统。 客户端应用程序只需在名为Requests的表中插入一个新行,其中包含请求的描述等。 我希望ticket manager应用程序能够从数据库中读取这些数据,并在将新请求插入数据库时进行更新

我在这里遵循了一个示例,并稍微修改了代码:

public主窗口()
{
初始化组件();
var data1=WaitForRequestList();
Task.WaitAll(data1);//这永远不会结束
列表=数据1.结果;
MessageBox.Show(list.ToString());//所以这个不会弹出
}
异步任务WaitForRequestList()
{
使用(HelpDeskTicketingEntities context=new HelpDeskTicketingEntities())//DbContext的子类
{
SqlDependency.Start(context.Database.Connection.ConnectionString);
SqlDependency=新的SqlDependency();
dependency.OnChange+=(发送方,e)=>
{
Console.Write(e.ToString());//这只打印一次,但不会在后续插入中打印
};
Task Task=Task.Factory.StartNew(异步()=>
{
System.Runtime.Remoting.Messaging.CallContext.SetData(“MS.sqldependencyccookie”,dependency.Id);
返回wait context.Requests.Where(r=>r.status==“Open”).toListSync();
}).Unwrap();
返回等待任务;
} 
}
但我看到的问题是,请求列表从未建立。ToListSync()永远不会结束

有人知道怎么了吗

此外,我希望sqldependency始终监视更改,而不是只工作一次。然而,如果我能解决我以前的问题,我想我能解决它

        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;
        } 
    }