Angular和Breeze多个EntityManagers

时间:2015-05-14 19:33:03

标签: angularjs breeze

我的角度应用程序使用Breeze并在datacontext服务中封装breeze调用。如何在不同的EntityManagers中使用此服务?我想在这种情况下我需要放弃使用datacontext作为角度服务,因为它似乎需要维护状态。

其他人如何处理这件事?我真的很讨厌无法使用角度服务,但我也想重新使用带有不同EntityManager的datacontext。

1 个答案:

答案 0 :(得分:0)

我不完全了解您提出具体答案的要求。但我不会那么快就放弃“datacontext”抽象。

  

此问题似乎与您的other question here有关,而exporting似乎是“沙箱”案例。我会在那里拿起线程。

当我需要与多个服务进行通信时,我需要多个EntityManagers,每个服务都有自己的实体模型。当发生这种情况时,我通常会为每个服务提供不同的工作流程,在这种情况下,我应该为每个工作流程分别设置“datacontexts”。问题“已解决”: - )

有时我会想要两个EntityManagers用于同一服务,因为我是“沙盒”。当我需要同一个名义实体的两个副本时,我“沙盒”:

  1. 表示数据库中实体状态的只读版本
  2. 保存用户未保存更改的可变版本。
  3. 我也可以使用单独的“datacontexts”实现这种情况

    1. 主要的只读datacontext处理应用程序的大部分数据访问需求。
    2. 小于第一个的“编辑”datacontext专注于编辑/保存工作流程。
    3. 每个datacontext都有自己的EntityManager实例。每个实例大多以相同的方式配置,并且通常具有相同的元数据。

      我可能会创建一个SandboxContextFactory服务来创建专用datacontext的新实例。每个此类SandboxContext都有自己的EntityManager

      我倾向于编写EntityManagerProvider(EMP)服务来创建EntityManager并将其注入datacontext服务。此EMP可以创建和协调通常配置的“主”EntityManager的多个实例。

      EMP可能:

      • 在开始时创建“主”EntityManager
      • 使用元数据(通过fetchMetadata调用)
      • 填充“master”
      • 使用应用范围的参考实体填充“主”(例如,“查找”实体)。
      • 当被问及时,可能会创建新的“沙盒”管理器。
        • 克隆主人:var childEm = masterEm.createEmptyCopy();
        • 使用来自主服务器的公共数据(例如,参考实体)填充孩子。您可以通过importing来自主人的相关实体和IdeaBlade's professional services他们轻松地将其转化为孩子。

      希望这些建筑推测能够激发出适合您的解决方案。如果您需要按照这些方式开发应用程序的帮助,可以考虑使用{{3}}。