BreezeJS - 跨模块处理查找表

BreezeJS - handling lookup tables across modules

我们有一个大型应用程序,允许用户在应用程序内的不同模块之间切换。每个模块都需要能够单独保存,所以每个模块都有自己的 EntityManager。

不过,我们希望在整个应用程序中使用一些查找 table。如果我们在应用程序级别加载查找 tables,使用不同的 EntityManager,那么它们在模块中不是很有用。

例如,如果我想在应用程序级别加载 'Countries' 查找 table,那么我就不能做像这样简单的事情:

Person.Country = lookupDataContext.getCountry('Norway')

如果 Person 在模块的 EntityManager 中。我会得到类似的东西:

"An Entity cannot be attached to an entity in another EntityManager. One of the two entities must be detached first."

我对 BreezeJS 的理解正确吗?如果是这样,是否意味着我需要在每个模块的 EntityManager 中查找国家/地区?这似乎非常有限。

我认为这个问题与 关于有多个 EntityManagers 有关。在那里查看我的一般想法,其中涵盖了您在此处描述的场景。

稍微具体一点:

  • Breeze 实体无法导航到不同 EntityManager 中的相关实体;这就是错误消息告诉您的内容。
  • 您可能确实希望两个管理器中的引用实体(例如国家/地区)的单独实例
  • 您可以使用 export and import 方法轻松地将任何一组实体从一个管理器复制到另一个管理器。您不必返回服务器。

现在,每个沙箱数据上下文都可以有一个 sandboxContext.lookups.countries 方法,而不是 lookupDataContext,该方法从适当的沙箱管理器传送适当的实体。

这是限制吗?只要

我觉得没那么差
  • 您不会在经理之间复制大量数据。
  • 引用实体在用户会话期间基本上是不可变的。
  • 一个用户会话不会让太多沙箱管理器同时处于活动状态
  • 您在处理完沙箱管理器(及其数据上下文)后对其进行处理或回收。

您应该能够实现从服务器一次加载查找并在主管理器中集中管理它们的目标。

这种方法在过去十年中在大量应用中非常成功(显然是在 Breeze 之前)。

HTH.