在微风中将实体从一个经理添加到另一个经理

时间:2014-05-27 15:19:58

标签: breeze

我使用相同的元数据创建了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

返回虚假!!!为什么呢?

任何帮助将不胜感激!

1 个答案:

答案 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.exportEntitiesentityManager.importEntities

var picture = em1.createEntity("Picture");
var entitiesToExport = [picture];
var exportedEntities = em1.exportEntities(entitiesToExport);
em2.importEntities(exportedEntities);

http://www.breezejs.com/documentation/multiple-managers

还详细记录了创建多个经理并在其中共享数据的主题

希望这有帮助。