Triggers breeze和sql server触发器

Triggers breeze和sql server触发器,triggers,breeze,key-generator,Triggers,Breeze,Key Generator,Breeze在保存这些数据时没有看到服务器端的数据发生了什么。Breeze团队表示,必须重新查询才能更新数据。可以考虑在此保存过程中同步执行的操作,如sql触发器(EXP.After Insert),因为这些操作可以在保存过程中转换实体,以便在客户端执行:这对于不是由Breeze生成的新键(如多部分键)非常有用。我很难解决这个问题。帮忙 更新1: 如果这是Breeze的原则,那很可能是一个bug 1) 触发器(在服务器端)是实体(表)的一部分 2) 使用的框架: 服务器端框架:.NET fra

Breeze在保存这些数据时没有看到服务器端的数据发生了什么。Breeze团队表示,必须重新查询才能更新数据。可以考虑在此保存过程中同步执行的操作,如sql触发器(EXP.After Insert),因为这些操作可以在保存过程中转换实体,以便在客户端执行:这对于不是由Breeze生成的新键(如多部分键)非常有用。我很难解决这个问题。帮忙

更新1: 如果这是Breeze的原则,那很可能是一个bug

1) 触发器(在服务器端)是实体(表)的一部分

2) 使用的框架:

  • 服务器端框架:.NET framework 4.5
  • 客户端框架:Breeze 1.3.5
  • 视图框架:淘汰2.2.1
3) 保存更改的结果方案:

function saveTousRecos() {
    return manager.saveChanges()
             .then(success)
             .fail(fail);
        function success(saveResult) {
            /* do your post-save work here */
            axi = saveResult.entities[0].jobtab();  
        // axi is an identity key generated at server and sent back to client by Breeze
        // result : Breeze value = (195), the same as server-side (195)
            ara = saveResult.entities[0].seqtab();  
        // ara is a property value inserted by sql FOR INSERT trigger, 
        // result : Breeze value = (NULL), server-side has (13)
            logger.log("Saving succeded... ");
        }
        function fail(error) {
            logger.log("Saving failed: " + error.message);
        }
    }
注意:SQL触发器插入的所有值都不可见,除非您从服务器(而不是缓存)重新调用实体;似乎是一种解决办法,我想这不是解决办法

更新2: 我认为Breeze认为我的回归实体与OData类似

1) 从我的Breeze Api控制器中,我使用以下内容:

return _contextProvider.Context.clients.Where(uc => uc.refclie == rqnoclie);
2) 微风说: 使用OData,服务器端计算字段值的任何更改在更新后都将无法在Breeze中使用。如果需要刷新这些值,则必须重新查询


3) 因此,从现在起,我的解决方案是重新查询(不是好消息),以获得计算或触发的结果。希望BeforeSaveEntity拦截器的未来能够解决这个问题。或者如何为Breeze获取纯实体(不是OData,而是计算或触发的服务器端)?有没有办法摆脱这个麻烦?

Breeze
EFContextProvider
重新查询它保存的实体并将它们发送回客户端。因此,如果SQL触发器更新了正在保存的实体,它会将SQL触发器更新的值发送回客户端。例如,如果保存实体“A”并且触发器更新了实体“A”的值,
EFContextProvider
将重新查询“A”,并将更新后的值发送给客户端

如果您能证明这是不正确的,请告诉我们。我相信那会是一个错误


微风不知道。。。我不知道。。。关于由SQL触发器更新的其他实体。Breeze在保存实体“A”时无法知道实体“B”已由触发器更新,因此没有理由查询“B”并将其发送给客户端。

@sbelini感谢Ward的帮助,但我认为困难仍然存在。我更新了我的答案,试图证明Breeze不向客户端返回sql触发器更新的结果。不知道这是否是一个bug。我对re query的评论是w/r/t Web API数据源,而不是OData数据源(我对它知之甚少)。我们将尝试复制您所描述的内容并向您报告。