0

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

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

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

  1. 我想打印我的数据并了解打印进度。
  2. 我想生成 PDF 报告并了解生成进度。

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

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

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

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

假设我在 UI 线程中打开一个 DBContext 来操作数据并累积更改,并且我想在另一个线程中进行导出,因为它很耗时(一个新的 DBContext),我对数据的更改没有被考虑在内,除了如果我保存数据。

所以我该怎么做 ...

  • 将数据库中的数据加载到磁盘上的 XML 文件中,然后处理这些文件并在保存时将数据放回数据库中?
  • 发挥想象力,把DBContext放到自己的线程中,让loading和lazy loading重定向到DBContext线程?
  • 始终将数据保存在数据库中,但是当出现“未保存”标志或类似情况时?

欢迎任何建议。

4

1 回答 1

2

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

于 2012-06-13T13:37:33.480 回答