【问题标题】:breeze.js how do I share metadata between 2 entity managers微风.js 如何在 2 个实体管理器之间共享元数据
【发布时间】:2014-05-07 20:34:07
【问题描述】:

我有 2 个实体经理:

var mgr1 = new breeze.EntityManager('api/app');
var mgr2 = new breeze.EntityManager('api/app');

现在我正在分别获取每一个的元数据,尽管元数据完全相同。我正在显式调用 fetch 方法来控制加载元数据的时间。

mgr1.fetchMetadata();
mgr2.fetchMetadata();

我了解到我可以在 2 位经理之间共享元数据,但我没有找到示例。从我读过的内容来看,我认为我可以在第二个管理器的构造函数中指定引用第一个管理器元数据的元数据,但不确定会是什么样子。所以我的代码看起来像这样:

var mgr1 = new breeze.EntityManager('api/app');
mgr1.fetchMetadata();
var mgr2 = new breeze.EntityManager({ serviceName: 'api/app', metadata: WHAT_GOES_HERE});

我知道我还必须使用 promises 对它进行排序,以便在第一个管理器加载元数据之前不会构建第二个管理器。

我是否走在正确的道路上?我的目标是消除为第二个经理加载元数据的额外带宽。谢谢

【问题讨论】:

  • 查看示例 - 我相信示例页面上的其中一个显示了多个 entityManager 配置

标签: javascript entity metadata breeze entitymanager


【解决方案1】:

您实际上不必获取元数据即可共享同一个 MetadataStore。以下两个陈述是一种非常简洁的方法:

var em1 = new breeze.EntityManager('api/app'); 
var em2 = em1.createEmptyCopy();

我并不想变得聪明。我的观点是MetadataStore,它是元数据的一个容器,在EntityManager 创建后立即可用,并且在保存任何元数据之前定义良好。

createEmptyCopy() 方法“克隆”管理器而不复制其实体缓存内容。复制的属性包括经理的MetadataStore 及其DataService

因为管理器共享相同的MetadataStore,所以使用任何一个管理器获取元数据就可以了。

查看 EntityManagerMetadataStore 的 Breeze API 文档。

【讨论】:

  • 这很有趣。我的应用程序中有一个用例,用户在屏幕中创建“事件”事务。 “事件”与一个人相关联,但这个人可能存在也可能不存在。并且数据库的结构使得一个人不能与“事件”同时创建,人记录必须首先物理存在。所以我打开一个弹出屏幕,以便在必要时添加一个人。我需要第二个事务完全独立于“事件”事务完成,所以我需要单独的实体缓存。我认为您上面编写的配置将允许这样做。
  • 我正在重新考虑这一点,并想知道是否可以轻而易举地执行“SaveChanges”但指定要发送到服务器的实体,同时将其他实体保留在缓存中以备后用“保存更改”。这可能是一个单独问题的候选者。
  • 这是一个单独问题的候选。 :-) 在查看saveChanges 的 API 文档后,您也许可以自己回答这个问题
  • 至于您第一条评论中的场景,您可以通过独立于其他待处理的事件更改保存新 Person 来轻松地使用一个经理完成此操作。通过查看saveChanges API 了解如何“挑选”实体进行保存...
【解决方案2】:

我以前从未使用过微风.js,但从我从文档 (http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html) 中收集到的信息来看,这样的东西应该可以工作:

var mgr1 = new breeze.EntityManager('api/app');
mgr1.fetchMetadata();
var mgr2 = new breeze.EntityManager({
   serviceName: 'api/app', 
   metadataStore: mgr1.metadataStore
});

当然,mgr2 应该在 mgr1.fetchMetadata 承诺完成后设置,正如您在问题中已经说过的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2012-05-08
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多