Javascript breeze.js如何在两个实体管理器之间共享元数据

Javascript breeze.js如何在两个实体管理器之间共享元数据,javascript,entity,metadata,breeze,entitymanager,Javascript,Entity,Metadata,Breeze,Entitymanager,我有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');
var mgr2 = new breeze.EntityManager('api/app');
现在,我将分别获取每一个的元数据,尽管元数据是完全相同的。我显式调用fetch方法来控制加载元数据的时间

mgr1.fetchMetadata();
mgr2.fetchMetadata();
我已经读到我可以在两位经理之间共享元数据,但我还没有找到一个例子。根据我所读的内容,我想我可以在引用第一个管理器元数据的第二个管理器的构造函数中指定元数据,但不确定它是什么样子。所以我的代码看起来像这样:

var mgr1 = new breeze.EntityManager('api/app');
mgr1.fetchMetadata();
var mgr2 = new breeze.EntityManager({ serviceName: 'api/app', metadata: WHAT_GOES_HERE});
我知道我还必须用承诺来调整这一点,这样第二个管理器就不会在第一个管理器加载元数据之前构建


我这样做对吗?我的目标是消除为第二个管理器加载元数据所需的额外带宽。谢谢

我以前从未使用过breeze.js,但从我从文档()收集的信息来看,类似这样的东西应该可以工作:

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

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

我以前从未使用过breeze.js,但从文档()中收集的信息来看,类似这样的功能应该可以工作:

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

当然,
mgr2
应该在
mgr1.fetchMetadata
承诺实现后设置,正如您在问题中所说。

您实际上不必获取元数据来共享相同的元数据存储。以下两条语句是一种非常简洁的方法:

var em1 = new breeze.EntityManager('api/app'); 
var em2 = em1.createEmptyCopy();
我不是想变得聪明。我的观点是
元数据存储
,它是元数据的容器,在创建
EntityManager
之后立即可用,并且在保存任何元数据之前都有很好的定义

createEmptyCopy()
方法“克隆”管理器,而不复制其实体缓存内容。复制的属性包括管理器的
元数据存储
及其
数据服务

因为两个管理器共享相同的
元数据存储
,所以使用其中一个管理器获取元数据就可以了


查看和的Breeze API文档。

您实际上不必获取元数据来共享同一元数据存储。以下两条语句是一种非常简洁的方法:

var em1 = new breeze.EntityManager('api/app'); 
var em2 = em1.createEmptyCopy();
我不是想变得聪明。我的观点是
元数据存储
,它是元数据的容器,在创建
EntityManager
之后立即可用,并且在保存任何元数据之前都有很好的定义

createEmptyCopy()
方法“克隆”管理器,而不复制其实体缓存内容。复制的属性包括管理器的
元数据存储
及其
数据服务

因为两个管理器共享相同的
元数据存储
,所以使用其中一个管理器获取元数据就可以了


查看和的Breeze API文档。

查看示例-我相信示例页面上的其中一个示例显示了多entityManager配置查看示例-我相信示例页面上的其中一个示例显示了多entityManager配置这非常有趣。我的应用程序中有一个用例,用户在屏幕上创建“事件”事务。“事件”与某人有关,但此人可能存在,也可能不存在。数据库的结构是这样的,即不能在创建“事件”的同时创建人员,人员记录必须首先实际存在。因此,我打开一个弹出屏幕,以便在必要时添加一个人。我需要第二个事务完全独立于“事件”事务完成,所以我需要单独的实体缓存。我认为您在上面编写的配置将允许这样做。我重新考虑了这一点,并想知道是否可以在breeze中执行“SaveChanges”,但指定要发送到服务器的实体,同时将其他实体保留在缓存中以备稍后的“SaveChanges”。这可能是一个单独问题的候选项。它是一个单独问题的候选项。:-)在查看API文档后,您可以自己回答该问题。对于您的第一条评论中的场景,您可以使用一位经理轻松地完成此操作,方法是独立于事件的其他未决更改保存新人员。了解如何“挑选”要保存的实体。。。通过回顾历史,这是非常有趣的。我的应用程序中有一个用例,用户在屏幕上创建“事件”事务。“事件”与某人有关,但此人可能存在,也可能不存在。数据库的结构是这样的,即不能在创建“事件”的同时创建人员,人员记录必须首先实际存在。因此,我打开一个弹出屏幕,以便在必要时添加一个人。我需要第二个事务完全独立于“事件”事务完成,所以我需要单独的实体缓存。我认为您在上面编写的配置将允许这样做。我重新考虑了这一点,并想知道是否可以在breeze中执行“SaveChanges”,但指定要发送到服务器的实体,同时将其他实体保留在缓存中以备稍后的“SaveChanges”。这可能是一个单独问题的候选项。它是一个单独问题的候选项。:-)在查看API文档后,您可以自己回答该问题。对于您的第一条评论中的场景,您可以使用一位经理轻松地完成此操作,方法是独立于事件的其他未决更改保存新人员。了解如何“挑选”要保存的实体。。。通过审查