【问题标题】:How to clear Original Values of a detached DevForce entity如何清除分离的 DevForce 实体的原始值
【发布时间】:2014-09-11 22:20:53
【问题描述】:

当作为InvokeServerMethod 调用的一部分将某些实体发送到服务器时,我们遇到了各种StackOverflowExceptionOutOfMemoryExceptions。问题似乎出现了,因为 DevForce 最终试图序列化比我们预期更多的数据。我追踪到存储在OriginalValuesMap 中的数据。

原始值为DataEntityProperties,我们已添加到实体中,但未标记[DataMember],因此它们通常不会发送到服务器。 但是如果我们有一个现有的(以前保存的实体)然后更改其中一个属性,则属性的初始值确实最终会被序列化为@987654327 的一部分@。这给我们带来了很大的问题,因为原来的值是一个拥有巨大实体图的实体。

除了问题之外,我们正在处理的实体实际上是现有(以前保存的)实体的克隆(通过((ICloneable)origEntity).Clone()),因此它们处于分离状态,我还没有找到清除@987654329 的方法@ 用于分离的实体。通常我会做myEntity.EntityAspect.AcceptChanges(),但这对分离的实体没有任何作用。我找不到任何其他简单的方法来做到这一点。

到目前为止,我发现清除原始值的唯一方法是将实体附加到实体管理器。这最终会清除原始值,但这是一个很大的痛苦,因为我实际上正在处理大量实体(因此性能是一个问题)并且其中许多实体没有唯一的主键值(事实上,它们没有填写任何键值,因为它们只是我不打算实际保存的“内存中”对象)所以我需要做额外的工作以避免在将它们添加到实体时出现“重复键异常”错误经理。

还有其他方法可以清除分离实体的原始值吗?或者,如果像 AcceptChanges 这样的东西甚至不适用于分离实体,那么分离实体是否应该首先跟踪原始值?或者,克隆实体不应该“继承”其来源的原始值?我对这些可能性中的任何一种都没有强烈的看法......我只是希望能够序列化我的实体。

我们的应用是运行 DevForce 2012 v7.2.4.0 的 Silverlight 客户端

【问题讨论】:

    标签: c# devforce


    【解决方案1】:

    在深入探讨分离实体的正确行为之前,我想备份并验证它确实是导致异常的 OriginalValuesMap。 OriginalValuesMap 的内容应该遵循 DataContractSerializer 的常规规则,所以我认为非 DataMember 项目不会被序列化。您可以尝试将这些问题实体之一序列化为文本文件以发送给 IdeaBlade 支持人员吗?您可以使用 SerializationFns.Save(entity, filename, null, false) 快速序列化项目。如果 OriginalValuesMap 确实包含不应该包含的内容,我还需要涉及的类型定义。

    【讨论】:

    • 我可以向您发送序列化请求。需要注意的一点是,它发生了一些奇怪的事情,因为当我尝试反序列化它时,我最终得到了一个数 GB 的文件,那是在我在一段时间后终止反序列化过程之后 - 所以似乎有某种无限循环或那里发生的事情。但巨文件的开头确实显示了 OriginalValuesMap 中的巨大价值。我现在会通过电子邮件发送。
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多