javascript – 如何使用EntityManager的saveChanges()方法保存单个实体?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何使用EntityManager的saveChanges()方法保存单个实体?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2457字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何使用EntityManager的saveChanges()方法保存单个实体?](/upload/InfoBanner/zyjiaocheng/816/856ba57bc0af479fa9370e3aecffcd23.jpg)
假设我有以下数据结构:具有Orders集合(1到n关系)的Customer实体.因此,Customer.Orders()返回零个或多个订单的数组.
现在,我创建一个新的Customer newCustomer和一个新的Orders实体数组.此Orders实体数组已分配给Customer.所有实体都具有“已添加”实体状态.
然后,我调用saveChanges(),如下所示:
manager.saveChanges([newCustomer])
我根据这个文档使用了saveChanges()的[entities]参数:http://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_saveChanges
我希望newCustomer及其Orders数组都将保存在服务器中,但只保存了newCustomer.
有没有办法保存newCustomer及其Orders数组?也许我可以传递[entities]参数中的所有实体,但这将是冗长的并且是一个错误点.我知道我只能调用saveChanges()方法来保存所有实体,但我想完全保存一个特定的实体.
提前致谢,
贝尔纳多帕切科
解决方法:
2014年10月8日更新
我坚持我的原始建议,以避免挑选樱桃.
但是如果你必须的话,@ utopik的评论提醒我,breeze labs has the getEntityGraph plugin可能会使这种情况变得相当容易.
在breeze本身之后安装getEntityGraph.js插件脚本.然后你应该可以说:
// get flat array of cust and its orders
var graph = manager.getEntityGraph(newCustomer,'Orders');
manager.saveChanges(graph);
您必须使用breeze“expand”子句语法明确说明应包含哪些导航路径.
此方法将已更改和未修改的图形实体发送到服务器.您可以过滤掉未更改的那些:
var changes = manager
.getEntityGraph(newCustomer,'Orders')
.filter(function(entity){
return !entity.entityAspect.entityState.isUnchanged();
});
manager.saveChanges(changes)
getEntityGraph有朝一日可能会成为核心产品.在那之前,有微风实验室.
原始答案
优秀的问题,BP.您对省略应保存的实体的担忧是我们不鼓励调用saveChanges(实体数组)的原因.例行,安全的事情就是调用saveChanges().这将在单个事务中保存具有挂起更改的每个实体.
我们为特殊情况提供选择性保存重载(您尝试过的重载),您需要在其中选择应保存的实体.你这样做时一定要小心;您不希望孤立相关实体…例如您添加到新客户的新订单.如你正确地指出的那样,犯错很容易.
我可以看到你希望Breeze推断它应该包含与父客户的子订单.但是你要求Breeze猜测你真正想要做什么.如果Breeze跟随每个导航路径的每个分支的newCustomer的cookie跟踪,谁知道它会保存什么…或者不保存?我们为您提供樱桃选择;现在你有责任准确地说出你的意思.
如果你真的需要保存newCustomer及其订单,你可以写:
var entitiesToSave = newCustomer.Orders().slice(); // Make sure it's a copy! entitiesToSave.push(newCustomer); // add the newCustomer too. manager.saveChanges(entitiesToSave); // save newCustomer and its orders.
但我求求你避免这种做法.如果您发现自己经常处于需要保存实体子集的位置,我建议您重新检查您的工作流程.也许你需要多个经理…… as described here.
内容总结
以上是互联网集市为您收集整理的javascript – 如何使用EntityManager的saveChanges()方法保存单个实体?全部内容,希望文章能够帮你解决javascript – 如何使用EntityManager的saveChanges()方法保存单个实体?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。