BreezeJS - 处理跨模块的查找表

时间:2015-05-14 16:20:57

标签: breeze

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

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

例如,如果我想在应用程序级别加载“国家/地区”查找表,那么我就无法做到这样简单:

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

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

“实体无法附加到另一个EntityManager中的实体。必须首先分离这两个实体中的一个。”

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

1 个答案:

答案 0 :(得分:0)

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

稍微具体一点:

  • Breeze实体无法导航到其他EntityManager中的相关实体;这就是错误信息告诉你的内容。
  • 您可能确实需要两个管理器中的参考实体(例如国家)的单独实例
  • 您可以使用exportimport方法轻松地将任何一组实体从一个经理复制到另一个经理。您无需返回服务器。

现在,每个沙箱datacontext都可以使用lookupDataContext方法,而不是sandboxContext.lookups.countries,从适当的沙箱管理器中提供适当的实体。

这是限制吗?只要

,我认为它不是那么糟糕
  • 您不会在管理人员之间复制大量数据。
  • 在用户会话期间,引用实体基本上是不可变的。
  • 用户会话不会同时保留太多沙盒管理器
  • 当您完成沙箱管理员(以及他们的datacontexts)后,您将对其进行处置或重新循环。

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

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

HTH。