C# 如何清除分离的DevForce实体的原始值

C# 如何清除分离的DevForce实体的原始值,c#,devforce,C#,Devforce,当作为InvokeServerMethod调用的一部分向服务器发送某些实体时,我们会遇到各种StackOverflowException和OutOfMemoryException异常。问题似乎出现了,因为DevForce最终尝试序列化的数据比我们预期的要多得多。我追踪到原始值映射中存储的数据 原始值是我们添加到实体中的DataEntityProperty的值,但没有用[DataMember]标记,因此它们通常不会被发送到服务器。但是,如果我们有一个先前保存的实体,然后更改其中一个属性,那么该属性

当作为InvokeServerMethod调用的一部分向服务器发送某些实体时,我们会遇到各种StackOverflowException和OutOfMemoryException异常。问题似乎出现了,因为DevForce最终尝试序列化的数据比我们预期的要多得多。我追踪到原始值映射中存储的数据

原始值是我们添加到实体中的DataEntityProperty的值,但没有用[DataMember]标记,因此它们通常不会被发送到服务器。但是,如果我们有一个先前保存的实体,然后更改其中一个属性,那么该属性的初始值最终会被序列化为OriginalValuesMap的一部分。这给我们带来了很大的问题,因为原来的值是一个具有巨大实体图的实体

除此之外,我们正在处理的实体实际上是通过ICloneableorigEntity.Clone克隆的。克隆以前保存的现有实体,使其处于分离状态,而我还没有找到清除分离实体的OriginalValuesMap的方法。通常我会执行myEntity.EntityAspect.AcceptChanges,但这对分离的实体没有任何作用。我找不到任何其他简单的方法来做这件事

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

是否有其他方法可以清除分离实体的原始值?或者,如果像AcceptChanges这样的事情对分离的实体都不起作用,那么分离的实体是否应该首先跟踪原始值?或者克隆实体不应该“继承”其源的原始值?我对这两种可能性都没有强烈的看法……我只是希望能够序列化我的实体


我们的应用程序是一个Silverlight客户端,运行DevForce 2012 v7.2.4.0

,在深入了解分离实体的正确行为之前,我想备份并验证它是否确实是导致异常的原始值映射。OriginalValuesMap的内容应该遵循DataContractSerializer的常规规则,因此我认为非DataMember项不会被序列化。能否尝试将这些问题实体之一序列化为文本文件,以发送给iDeaBrade支持?您可以使用SerializationFns.Saveentity、filename、null、false快速序列化项。如果它看起来确实像原始的ValuesMap包含了它不应该包含的内容,那么我还需要涉及的类型定义。

我可以向您发送一个序列化请求。需要注意的是,它发生了一些奇怪的事情,因为当我尝试反序列化它时,我最终得到了一个数千兆字节的文件,而这是在我在一段时间后终止了反序列化过程之后-因此似乎存在某种无限循环或其他情况。但是巨大文件的开头确实显示了原始值映射中的巨大值。我现在就发电子邮件。