Esempio n. 1
0
        public void Eject <T>(T document)
        {
            var id = Tenant.StorageFor <T>().Identity(document);

            IdentityMap.Remove <T>(id);

            _unitOfWork.Eject(document);
        }
Esempio n. 2
0
        public void SaveChanges()
        {
            var docs     = new List <CouchDocument>();
            var entities = new List <object>();

            foreach (var entity in DeletedEntities)
            {
                EntityMetadata entityMetadata;
                if (EntityMetadataMap.TryGetValue(entity, out entityMetadata))
                {
                    EntityMetadataMap.Remove(entity);
                    IdentityMap.Remove(entityMetadata.Key);

                    Type         entityType       = entity.GetType();
                    PropertyInfo identityProperty = CouchDatabase.CouchDocumentConvention.GetIdentityPropertyFor(entityType);

                    docs.Add(CouchDocument.Dehydrate(entity, identityProperty, entityMetadata.Revision, true));
                    entities.Add(entity);
                }
            }
            DeletedEntities.Clear();

            foreach (var entity in EntityMetadataMap.Where(pair => IsEntityDirty(pair.Key, pair.Value)))
            {
                Type         entityType       = entity.Key.GetType();
                PropertyInfo identityProperty = CouchDatabase.CouchDocumentConvention.GetIdentityPropertyFor(entityType);
                docs.Add(CouchDocument.Dehydrate(entity.Key, identityProperty, entity.Value.Revision, false));
                entities.Add(entity.Key);
            }

            if (docs.Count == 0 && entities.Count == 0)
            {
                return;
            }

            var bulkDocsMessage = new BulkDocsMessage(docs);
            var bulkDocsCommand = new BulkDocsCommand(CouchDatabase.Name, bulkDocsMessage);

            BulkDocsResult[] results = CouchDatabase.CouchProxy.Execute <BulkDocsResult[]>(bulkDocsCommand);

            for (int index = 0; index < results.Length; index++)
            {
                BulkDocsResult result = results[index];
                object         entity = entities[index];

                EntityMetadata entityMetadata;
                if (EntityMetadataMap.TryGetValue(entity, out entityMetadata) == false)
                {
                    continue;
                }

                IdentityMap[result.Id]        = entity;
                entityMetadata.Revision       = result.Rev;
                entityMetadata.OriginalEntity = entity;
            }
        }
Esempio n. 3
0
        public void remove_item()
        {
            var target = Target.Random();
            var target2 = Target.Random();
            target2.Id = target.Id;

            var serializer = new JilSerializer();

            var map = new IdentityMap(serializer);

            var target3 = map.Get<Target>(target.Id, serializer.ToJson(target));

            // now remove it
            map.Remove<Target>(target.Id);

            var target4 = map.Get<Target>(target.Id, serializer.ToJson(target2));
            target4.ShouldNotBeNull();
            target4.ShouldNotBeTheSameAs(target3);

        }
Esempio n. 4
0
        public void remove_item()
        {
            var target  = Target.Random();
            var target2 = Target.Random();

            target2.Id = target.Id;

            var serializer = new JilSerializer();

            var map = new IdentityMap(serializer, null);

            var target3 = map.Get <Target>(target.Id, serializer.ToJson(target), null);

            // now remove it
            map.Remove <Target>(target.Id);

            var target4 = map.Get <Target>(target.Id, serializer.ToJson(target2), null);

            target4.ShouldNotBeNull();
            target4.ShouldNotBeTheSameAs(target3);
        }
Esempio n. 5
0
        public void remove_item()
        {
            var target  = Target.Random();
            var target2 = Target.Random();

            target2.Id = target.Id;

            var serializer = new TestsSerializer();

            var map = new IdentityMap(serializer, null);

            var target3 = map.Get <Target>(target.Id, serializer.ToJson(target).ToReader(), null);

            // now remove it
            map.Remove <Target>(target.Id);

            var target4 = map.Get <Target>(target.Id, serializer.ToJson(target2).ToReader(), null);

            SpecificationExtensions.ShouldNotBeNull(target4);
            target4.ShouldNotBeTheSameAs(target3);
        }
Esempio n. 6
0
        private async Task DeleteEntityAsync(object obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }
            else if (obj is IIndex)
            {
                throw new ArgumentException("Can't call DeleteEntity on an Index");
            }
            else
            {
                var accessor = _store.GetIdAccessor(obj.GetType(), "Id");
                if (accessor == null)
                {
                    throw new InvalidOperationException("Could not delete object as it doesn't have an Id property");
                }

                var id  = accessor.Get(obj);
                var doc = await GetDocumentByIdAsync(id);

                if (doc != null)
                {
                    await _storage.DeleteAsync(new IdentityDocument(id, obj));

                    // Untrack the deleted object
                    _identityMap.Remove(id, obj);

                    // Update impacted indexes
                    MapDeleted(doc, obj);

                    // The command needs to come after any index deletiong because of the database constraints
                    _commands.Add(new DeleteDocumentCommand(doc, _store.Configuration.TablePrefix));
                }
            }
        }