WPF:DB更改时更新视图模型(并发问题)

时间:2016-05-25 10:32:40

标签: entity-framework mvvm database-concurrency

我目前正在开发WPF应用程序,其架构如下:

  • MVVM
  • 实体框架4(使用LINQ)。
  • 汇集数据库以获取数据的WCF服务(Oracle)。
  • 我在View Model Class中进行WFC调用,并将我的数据放入ObsevableCollections。
  • Db更改来自另一个应用程序。

所以我的应用程序不会对数据库执行任何写操作(Zéro),它只读取数据并在UI上显示。

如何让我的应用程序快速响应数据库更改,我阅读了以下解决方案,但我很困惑,不知道该使用什么:

  • 使用DispatcherTimer每隔n秒汇集数据库(似乎工作量过大导致数据每毫秒更改一次)
  • SqlDependency,在互联网上搜索,但没有找到适当的EF实现。

正如我所说,db每毫秒都会改变(来自其他来源的财务数据),

如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

我尝试了下面的代码,它似乎暂时正常工作(但我对这个无限循环仍有疑问),让我知道你的意思:

public class MyViewModel
    {


          BackgroundWorker _bgWorker ;
          //some props
          //some funcs


protected internal MyViewModel(Session session)
        {
            Session = session;
            RefreshData();
        }        

protected void RefreshData()
        {
            try
            {
                _bgWorker = new BackgroundWorker
                {
                    WorkerReportsProgress = true,
                    WorkerSupportsCancellation = true

                };
                _bgWorker.DoWork += bgDoWork;

                if (!_bgWorker.IsBusy)
                {
                    _bgWorker.RunWorkerAsync();
                }
            }
            catch (Exception)
            {
                _bgWorker.CancelAsync();
            }
        }

        private void bgDoWork(object sender, DoWorkEventArgs e)
        {
            var worker = (BackgroundWorker)sender;
            while (!worker.CancellationPending)
            {
                //Thread.Sleep(1000); should i keep this or not ?
                Proxy(); // WCF calls
            }
        }
        }