Exemple #1
0
        public void SetResult(BatchResult result)
        {
            for (var i = _deferredCommandsCount; i < result.Results.Length; i++)
            {
                var batchResult = result.Results[i] as BlittableJsonReaderObject;
                if (batchResult == null)
                {
                    throw new ArgumentNullException();
                }

                string methodType;
                batchResult.TryGet("Method", out methodType);

                if (methodType != "PUT")
                {
                    continue;
                }

                var          entity = _entities[i - _deferredCommandsCount];
                DocumentInfo documentInfo;

                if (_session.DocumentsByEntity.TryGetValue(entity, out documentInfo) == false)
                {
                    continue;
                }

                string key;
                long?  etag;
                BlittableJsonReaderObject metadata;
                if (batchResult.TryGet("Metadata", out metadata))
                {
                    documentInfo.Metadata = metadata;
                }
                if (batchResult.TryGet("Etag", out etag))
                {
                    documentInfo.ETag = etag;
                }
                if (batchResult.TryGet("Key", out key))
                {
                    documentInfo.Id             = key;
                    _session.DocumentsById[key] = documentInfo;
                }

                var afterStoreEventArgs = new AfterStoreEventArgs(_session, documentInfo.Id, documentInfo.Entity);
                _session.OnAfterStoreInvoke(afterStoreEventArgs);
            }
        }
Exemple #2
0
        public void SetResult(BlittableArrayResult result)
        {
            if (result.Results == null) //precaution
            {
                ThrowOnNullResults();
                return;
            }

            for (var i = 0; i < _sessionCommandsCount; i++)
            {
                var batchResult = result.Results[i] as BlittableJsonReaderObject;
                if (batchResult == null)
                {
                    throw new ArgumentNullException();
                }

                batchResult.TryGet("Type", out string type);

                if (type != "PUT")
                {
                    continue;
                }

                var entity = _entities[i];
                if (_session.DocumentsByEntity.TryGetValue(entity, out DocumentInfo documentInfo) == false)
                {
                    continue;
                }

                if (batchResult.TryGet(Constants.Documents.Metadata.ChangeVector, out string changeVector) == false || changeVector == null)
                {
                    throw new InvalidOperationException("PUT response is invalid. @change-vector is missing on " + documentInfo.Id);
                }

                if (batchResult.TryGet(Constants.Documents.Metadata.Id, out string id) == false || id == null)
                {
                    throw new InvalidOperationException("PUT response is invalid. @id is missing on " + documentInfo.Id);
                }

                documentInfo.Metadata.Modifications = null;
                documentInfo.Metadata.Modifications = new DynamicJsonValue(documentInfo.Metadata);

                foreach (var propertyName in batchResult.GetPropertyNames())
                {
                    if (propertyName == "Type")
                    {
                        continue;
                    }

                    documentInfo.Metadata.Modifications[propertyName] = batchResult[propertyName];
                }

                documentInfo.Id                     = id;
                documentInfo.ChangeVector           = changeVector;
                documentInfo.Metadata               = _session.Context.ReadObject(documentInfo.Metadata, id);
                documentInfo.Document.Modifications = null;
                documentInfo.Document.Modifications = new DynamicJsonValue(documentInfo.Document)
                {
                    [Constants.Documents.Metadata.Key] = documentInfo.Metadata
                };
                documentInfo.Document         = _session.Context.ReadObject(documentInfo.Document, id);
                documentInfo.MetadataInstance = null;

                _session.DocumentsById.Add(documentInfo);
                _session.GenerateEntityIdOnTheClient.TrySetIdentity(entity, id);

                var afterStoreEventArgs = new AfterStoreEventArgs(_session, documentInfo.Id, documentInfo.Entity);
                _session.OnAfterStoreInvoke(afterStoreEventArgs);
            }
        }