【发布时间】:2015-06-21 00:10:02
【问题描述】:
我在我的项目中使用沙盒实体管理器和部分实体模式。在沙盒 EntityManager 中,我有一个完整的实体,其中包含我想应用于我的主 EntityManager 的更改(修改)。我采取的方法如下:
- 从我的主 EntityManager 中分离我希望更新的“未修改”部分实体。
- 从我的沙盒实体管理器中分离“修改的”完整沙盒实体。
- 将分离的沙箱实体附加到我的主 EntityManager。
我遇到的问题是 detachEntity() 调用重置了我的沙盒实体上的 originalValues 哈希映射。我期望当我将修改后的实体重新附加到主 EntityManager 时,a) 部分实体将被替换为完整实体,b) EntityState 仍将是“已修改" 并且OriginalValues 哈希映射仍将包含已更改属性的列表。然而,事实并非如此。主 EntityManager 中实体的状态为“已修改”,但 originalValues 的映射为空。
因此,当我在 EntityManager 上调用 SaveChanges() 时,FULL 对象被发送回服务器,而不仅仅是变更集。
我的问题是为什么调用detachEntity()(或间接_detach() 方法)会清除originalValues 哈希映射?
这里是似乎是罪魁祸首的微风方法:
proto._detach = function () {
this.entityGroup = null;
this.entityManager = null;
this.entityState = EntityState.Detached;
this.originalValues = {}; // <!-- Why???
this._validationErrors = {};
this.hasValidationErrors = false;
this.validationErrorsChanged.clear();
this.propertyChanged.clear();
};
非常感谢
【问题讨论】:
标签: breeze