如何查看 "non - eco" 个插入的对象

How to see "non - eco" inserted objects

我们仍在将 ECO5 与 VS 2008 一起使用。“非生态”应用程序使用与我们的生态应用程序相同的数据库并插入数据。插入的数据(对象)在我们的生态应用程序中是看不到的,除非我们重新启动这个应用程序。没有必要重新启动持久性服务器,我假设我们正确地插入了数据(尊重插入 ECOModelRoot 并递增 ECO_ID),因为生态应用程序在重新启动后正确显示它们。

我们尝试将 ecospace.active 设置为 false,然后再次设置为 true,然后 ecospace.persistence.refresh(true)。插入的数据仍然没有显示,尽管相关查询之前关闭并在之后打开。

我们如何让我们的生态应用程序看到“非生态”插入的对象?

正确插入数据后,您的场景与两个独立的 ECO 应用程序写入同一数据库的场景相同。

因此,为了能够回答您的问题,我们需要更多地了解您的应用程序架构,因为通常通过将 active 设置为 false 来关闭生态空间就足够了。某种类型的追逐仍在发生。

  • 您是使用具有数据库持久性的 EcoSpace 还是使用持久性服务器?在这种情况下,服务器需要重新启动。
  • 您是否尝试使用单独的 eco-Application 插入数据?您是否遇到过相同的行为?
  • 您可以尝试实例化一个新的 EcoSpace 对象,而不是将您的 EcoSpace 设置为不活动。
  • 您可以将 SQL 日志记录切换为 true,以便您可以查看针对数据库触发了哪些 SQL。

还有一些方法可以使特定对象的 EcoSpace 缓存无效或 类 但您首先必须找出您的问题所在。

如果您从“第三方应用程序”插入或更新对象,您可以使用 selfVM.SuspectExternalUpdateInvalidate(listOfObjectsYouSuspect)。

这样做会通知 SyncServer(您在 MDrivenServer 中有一个同步服务器)该行需要完全重新读取 - 由缓存了该行的所有客户端。

客户将在进行下一次刷新时获得此信息(可通过 selfVM.Refresh 和作为框架操作获得)。如果您使用 MDrivenServer,客户端将通过推送通知得到通知并快速更新他们的 UI.

要了解更多信息以及有关如何使用此功能的完整示例,请参阅 https://wiki.mdriven.net/index.php/SQL_Server_change_tracking

如果您使用 MS SQL 服务器,wiki 中也有关于如何有效地自动跟踪 table 更改和刷新这些更改的示例。

注意!您需要一个从 2018 年 6 月开始的框架才能使用此功能。