public override IObjectsDataSet CloneDirtyObjects(IObjectsDataSet rootDataSet) { var clone = new GORoleObjectsDataSet(rootDataSet as ObjectsDataSet); bool completed; foreach (var keyValue in this.GORoleObjects.Where(o => o.Value.IsDirty || o.Value.IsMarkedForDeletion)) { var cloneObject = (GORoleDataObject)keyValue.Value.Clone(false); cloneObject.InternalObjectId = keyValue.Value.InternalObjectId; completed = false; while (!completed) { completed = clone.GORoleObjects.TryAdd(keyValue.Key, cloneObject); } } foreach (var keyValue in this.GORoleObjectInternalIds .Where(o => this.GORoleObjects[o.Value].IsDirty || this.GORoleObjects[o.Value].IsMarkedForDeletion)) { completed = false; var count = 0; while (!completed && count++ < 15) { completed = clone.GORoleObjectInternalIds.TryAdd(keyValue.Key, keyValue.Value); } } // CloneDirtyObjects is used to pass only dirty objects to server to save changes. Since indexes are not serialized, no need to clone them return(clone); }
public override IObjectsDataSet Clone(IObjectsDataSet rootDataSet) { var clone = new GORoleObjectsDataSet(rootDataSet as ObjectsDataSet); bool completed; foreach (var keyValue in this.GORoleObjects) { var cloneObject = (GORoleDataObject)keyValue.Value.Clone(false); cloneObject.InternalObjectId = keyValue.Value.InternalObjectId; completed = false; var count = 0; while (!completed && count++ < 15) { completed = clone.GORoleObjects.TryAdd(keyValue.Key, cloneObject); } } foreach (var keyValue in this.GORoleObjectInternalIds) { completed = false; var count = 0; while (!completed && count++ < 15) { completed = clone.GORoleObjectInternalIds.TryAdd(keyValue.Key, keyValue.Value); } } return(clone); }