在EF6中的db插入时通知

时间:2015-08-13 17:46:45

标签: c# database entity-framework-6

我正在使用实体框架为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始终关注更改,而不是仅仅工作一次。但是,如果我能解决以前的问题,我想我能搞清楚。

0 个答案:

没有答案