Exemplo n.º 1
0
            protected override void Given()
            {
                entity1 = new Employee {
                    Name = "Bob", Login = "******"
                };
                entity1Type      = entity1.GetType();
                identityProperty = entity1Type.GetProperty("Id");
                identityType     = identityProperty.PropertyType;
                id = Guid.NewGuid();

                documentConvention = Fake <ICouchDocumentConvention>();
                documentConvention.GetIdentityPropertyFor(entity1Type).Returns(identityProperty);
                documentConvention.GenerateIdentityFor(identityType).Returns(id);

                bulkDocsResults    = new BulkDocsResult[1];
                bulkDocsResults[0] = new BulkDocsResult {
                    Id = id.ToString(), Rev = "123456"
                };
                couchProxy = Fake <ICouchProxy>();
                couchProxy.Execute <BulkDocsResult[]>(Arg.Any <BulkDocsCommand>()).Returns(bulkDocsResults);

                couchDatabase = Fake <ICouchDatabase>();
                couchDatabase.CouchDocumentConvention.Returns(documentConvention);
                couchDatabase.Name.Returns("ottoman-test-database");
                couchDatabase.CouchProxy.Returns(couchProxy);
            }
Exemplo n.º 2
0
            protected override void Given()
            {
                documentId       = Guid.NewGuid();
                entity1Type      = typeof(Employee);
                identityProperty = entity1Type.GetProperty("Id");

                documentConvention = Fake <ICouchDocumentConvention>();
                documentConvention.GetIdentityPropertyFor(entity1Type).Returns(identityProperty);

                var couchDocument = new CouchDocument();

                couchDocument.Add("_id", documentId.ToString());
                couchDocument.Add("_rev", "123456");
                couchDocument.Add("Type", entity1Type.Name);
                couchDocument.Add("Name", "Bob");
                couchDocument.Add("Login", "boblogin");

                bulkDocsResults    = new BulkDocsResult[1];
                bulkDocsResults[0] = new BulkDocsResult {
                    Id = documentId.ToString(), Rev = "123456"
                };
                couchProxy = Fake <ICouchProxy>();
                couchProxy.Execute <CouchDocument>(Arg.Any <GetDocumentCommand>()).Returns(couchDocument);
                couchProxy.Execute <BulkDocsResult[]>(Arg.Any <BulkDocsCommand>()).Returns(bulkDocsResults);

                couchDatabase = Fake <ICouchDatabase>();
                couchDatabase.Name.Returns("ottoman-test-database");
                couchDatabase.CouchProxy.Returns(couchProxy);
                couchDatabase.CouchDocumentConvention.Returns(documentConvention);
            }
Exemplo n.º 3
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;
            }
        }