我使用相同的元数据创建了2个实体管理器,并希望将一个实体从manager1添加到manager2。
我收到错误:无法附加此实体,因为与此实体关联的EntityType和MetadataStore与此EntityManager的MetadataStore不匹配。
这里是创建经理的功能:
function createLocalManager(servName) {
var dataService = new breeze.DataService({
serviceName: servName,
hasServerMetadata: false
});
var metadataStore = new breeze.MetadataStore();
metadataStore.importMetadata(app.metadata); // initialize it from the application's metadata variable
return new breeze.EntityManager({
dataService: dataService,
metadataStore: metadataStore
});
}
这里我得到了我的错误:
em1 = createLocalManager('serviceName1');
em1.createEntity("Picture");
em2 = createLocalManager('serviceName2');
em2.addEntity(em1.getEntities()[0]);
我也检查了这个
em1.metadataStore == em2.metadataStore
返回虚假!!!为什么呢?
任何帮助将不胜感激!
答案 0 :(得分:2)
首先,Breeze提供了一个名为entityManager.createEmptyCopy()
的方法来创建具有相同元数据的原始EntityManager的副本。
var em2 = em1.createEmptyCopy();
其次,由于您使用的是其他DataService
,因此您必须手动设置em2
dataService。
var ds = new breeze.DataService({
serviceName: 'serviceName2',
hasServerMetadata: false
});
em2.setProperties({dataService: ds});
最后,在多个entityManagers之间共享实体的正确方法是使用entityManager.exportEntities
和entityManager.importEntities
var picture = em1.createEntity("Picture");
var entitiesToExport = [picture];
var exportedEntities = em1.exportEntities(entitiesToExport);
em2.importEntities(exportedEntities);
http://www.breezejs.com/documentation/multiple-managers
还详细记录了创建多个经理并在其中共享数据的主题希望这有帮助。