internal EntityDescriptorState SaveState(Guid id, Dictionary<EntityDescriptor, Guid> ids)
        {
            var state = new EntityDescriptorState();

            base.SaveState(state);

            state.DescriptorId = id;
            state.EditLink = this.editLink;
            state.EditMediaLink = this.editMediaLink;
            state.Entity = this.entity;
            state.EntitySetName = this.entitySetName;
            state.Etag = this.etag;
            state.Identity = this.identity;
            state.ParentDescriptorId = (this.parentDescriptor != null) ? ids[this.parentDescriptor] : (Guid?)null;
            state.ParentProperty = this.parentProperty;
            state.ReadStreamLink = this.readStreamLink;
            state.SaveStream = (this.saveStream != null) ? this.saveStream.SaveState() : null;
            state.SelfLink = this.selfLink;
            state.ServerTypeName = this.serverTypeName;
            state.StreamETag = this.streamETag;
            state.StreamState = this.streamState;

            return state;
        }
        internal static EntityDescriptor RestoreState(EntityDescriptorState state)
        {
            SaveStreamState saveStreamState = state.SaveStream;
            DataServiceContext.DataServiceSaveStream saveStream = (saveStreamState != null)
                ? DataServiceContext.DataServiceSaveStream.RestoreState(saveStreamState)
                : null;

            var entityDescriptor = new EntityDescriptor(
                state.Identity,
                state.SelfLink,
                state.EditLink,
                state.Entity,
                null,
                null,
                state.EntitySetName,
                state.Etag,
                state.State)
            {
                editMediaLink = state.EditMediaLink,
                readStreamLink = state.ReadStreamLink,
                saveStream = saveStream,
                selfLink = state.SelfLink,
                serverTypeName = state.ServerTypeName,
                streamETag = state.StreamETag,
                streamState = state.StreamState,
            };

            entityDescriptor.RestoreState((DescriptorState)state);

            return entityDescriptor;
        }