public void Eject <T>(T document) { var id = Tenant.StorageFor <T>().Identity(document); IdentityMap.Remove <T>(id); _unitOfWork.Eject(document); }
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; } }
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); }
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); }
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); }
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)); } } }