通过breeze上下文保存一组新实体;“保存更改”;

通过breeze上下文保存一组新实体;“保存更改”;,breeze,Breeze,如果我有一个实体包含另一个实体的1:n集合,那么保存该集合的正确方法是什么 我必须这样做(代码尚未最终确定/检查): 返回datacontext.savechanges([parentEntity]),然后(function()){ for(var i=0;i

如果我有一个实体包含另一个实体的1:n集合,那么保存该集合的正确方法是什么

我必须这样做(代码尚未最终确定/检查):

返回datacontext.savechanges([parentEntity]),然后(function()){
for(var i=0;i
“datacontext”是一个异步模块,具有各种公开方法,包括创建新的子实体

虽然我还没有对此进行测试,但它在逻辑上对我来说是可行的,但是我在createEntity/modifyEntity/saveEntity循环中为我要添加到childEntities集合中的每个新子对象循环是正确的吗?这是唯一的方法还是有一种方法可以一次性完成所有childEntities

“parentID”是生成的标识字段存储,因此我必须等待初始父级保存完成,然后才能使用返回的ID


编辑添加:我不认为我需要一个“然后”在async newChildEntity保存结束时,是吗?我需要它仍然是异步的,这样它就可以在多个ChildEntity之间快速切换和循环,因为依赖位是已经生成的父记录的id。所有子记录共享相同的parentID,这样我就可以在不等待saveChanges方法调用的情况下设置多个保存响应,对吗?

Breeze的EntityManager.saveChanges可以在一次调用中保存任意数量的实体,这比尝试为每个实体调用一次saveChanges要有效得多

另外,我不确定为什么makeNewChildEntity需要异步,Breeze的EntityManager.createEntity本身是同步的,所以我认为您需要做的就是这样

return datacontext.savechanges([parentEntity]).then(function() {
    var listOfEntities = [parentEntity];
    for (var i=0;i < childArray.length;i++) {
        // synchronous makeNewChildEntity
        var newChildEntity = datacontext.makeNewChildEntity();
        newChildEntity.parentID(parentEntity().id());
        ...
        //set other newChildEntity properties
        ...
        listOfEntities.push(newChildEntity);
     }
     // alternatively use datacontext.savechanges(listOfEntities).then(...)
     return datacontext.savechanges().then(function() {               
             //set finished flag and exit function...
     }
}
返回datacontext.savechanges([parentEntity]),然后(function()){
var listOfEntities=[parentEntity];
for(var i=0;i

}

啊,是的。关于“createEntity”的同步性质,我已经忘记了这一点。我将快速尝试实现这一点,但它看起来很好,感谢Jay的指导。Jay只有一件事-这行可以做什么?
var ListofEntity=[parentEntity]
?这是我不知道的与breeze相关的函数吗?如果您想创建一个包含parentEntity及其子项列表的数组。这只会启动包含parentEntity的数组。(请参阅备用调用)。
return datacontext.savechanges([parentEntity]).then(function() {
    var listOfEntities = [parentEntity];
    for (var i=0;i < childArray.length;i++) {
        // synchronous makeNewChildEntity
        var newChildEntity = datacontext.makeNewChildEntity();
        newChildEntity.parentID(parentEntity().id());
        ...
        //set other newChildEntity properties
        ...
        listOfEntities.push(newChildEntity);
     }
     // alternatively use datacontext.savechanges(listOfEntities).then(...)
     return datacontext.savechanges().then(function() {               
             //set finished flag and exit function...
     }
}