我在项目中使用Sandboxed EntityManager和Partial Entity模式。在Sandboxed EntityManager中,我有一个完整的实体,其中包含我想要应用于我的主EntityManager的更改(已修改)。我采取的方法如下:
我遇到的问题是detachEntity()
调用会重置我的沙盒实体上的originalValues
哈希映射。我期待当我将修改后的实体重新附加到主EntityManager时 a)部分实体将被替换为完整实体而 b) EntityState仍然是&# 34;变形"并且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();
};
非常感谢
答案 0 :(得分:0)
好问题。为什么我们这样做?
清除它是没有错的 - 分离是一个强烈的信号,你不再想跟踪实体 - 但清除在语义上是不明显的,在你的情况下肯定是不方便的。
我认为可能会发布GC的参考资料。但我想不出原始价值中的任何参考。
通过归零originalValues也没有太大的记忆力。
我们有可能试图清理甲板以进行重新安装。但是,根据附加的EntityState重新附加可以实现该选择。
当你重新连接修改时,我不知道微风对OV的影响。可能会或可能不会保留它。
我会让我们的一位建筑师权衡。
与此同时,你的场景有点奇特,解决方法非常明显,是吗?