使用数据库的桌面应用程序..为什么满足客户期望如此困难

本文关键字:期望 客户 满足 为什么 数据库 桌面 应用程序 | 更新日期: 2023-09-27 18:37:14

我正在用WPF开发一个桌面应用程序,该应用程序正在操作存储在数据库中的大量数据。应用程序使用图表和网格来呈现该数据。

我选择使用实体框架(代码优先)访问数据。它易于使用,延迟加载是我一直在寻找的。在搜索 NET 时,我发现实体框架似乎被设计为用于"工作单元"策略。

让我们从我的客户那里得到两个简单的期望:

  1. 我想打印我的数据并被告知打印进度。
  2. 我想生成一个PDF报告,并被告知生成进度。

客户看到网格,所以他期待一些对 Excel 关闭的东西。

  1. 打印和报告生成应考虑对数据。
  2. 在用户保存之前,修改无效。

例如,打开 excel,修改工作表,打印它并关闭应用程序丢弃更改。

  1. 打印所有工作表,包括未保存的数据
  2. 如果我重新打开文件,未保存的数据将不再存在。

假设我在 UI 线程中打开 DBContext 以操作数据并累积更改,并且我想在另一个线程中进行导出,因为它很耗时(一个新的 DBContext),则除非我保存数据,否则不会考虑我对数据的更改。

那么,我该怎么办...

  • 将数据从数据库加载到磁盘上的XML文件并处理这些文件,并在保存时将数据放回数据库?
  • 使用大量的想象力将DBContext放在自己的线程中,并使加载和延迟加载重定向到DBContext线程?
  • 始终将数据保存在数据库中,但是当"未保存"标志或类似的东西时?

欢迎任何建议。

使用数据库的桌面应用程序..为什么满足客户期望如此困难

我会让 ViewModel 公开一个可观察的集合,该集合异步加载,以免阻塞 UI 线程。 然后,我将公开一个提供您正在寻找的保存功能的命令。 这样,您可以访问修改后的对象 (ObservableCollection) 进行打印,并在用户未点击"保存"命令时丢弃它们。