此异常的原因是“createEntity”方法创建实体,然后将您的“数据”分配给它,但对于任何集合导航属性,该集合已经存在,Breeze 不允许您替换它。对于应用程序的其他部分可能持有对集合的引用的现有实体来说,这是一个深思熟虑的选择,但在这种情况下,您是“第一个”访问该集合的人就显得过分了。目前,解决方法是更新任何导航集合而不是替换它们。
因此,最简单的方法是调用 createEntity 方法而不使用任何集合数据属性,然后将数据推送到您的集合中
var driver = manager.createEntity('Driver', dataWithoutCollections, EntityState.Unchanged)
// then update collection properties by pushing into them.
trafficFines.forEach(function(trafficFine) {
driver.trafficFines.push(trafficFine); // or use push.apply
};
请注意,添加到实体的集合属性不会导致 EntityState 更改,因此这应该足够了。
基于此问题,我将添加一个功能请求以在您调用“createEntity”方法的情况下抑制此异常,因为应用程序的其他部分已经可以访问新实体并没有危险。