Exemplo n.º 1
0
        public void can_update_and_delete_related_documents_synchronous()
        {
            var emp1 = new CoffeeShopEmployee();
            var doc1 = new CoffeeShop();

            doc1.Employees.Add(emp1.Id);

            using (var session = theStore.OpenSession())
            {
                session.Store(emp1);
                session.Store(doc1);
                session.SaveChanges();
            }

            using (var session = theStore.OpenSession(tracking: DocumentTracking.DirtyTracking))
            {
                var emp = session.Load <CoffeeShopEmployee>(emp1.Id);
                var doc = session.Load <CoffeeShop>(doc1.Id);

                doc.Employees.Remove(emp.Id);
                session.Delete(emp);

                session.SaveChanges();
            }
        }
Exemplo n.º 2
0
        public async Task store_with_the_right_version_async()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                await session.SaveChangesAsync();
            }

            DocumentMetadata metadata;

            using (var session = theStore.QuerySession())
            {
                metadata = await session.MetadataForAsync(doc1);
            }

            using (var session = theStore.OpenSession())
            {
                doc1.Name = "Mozart's";
                session.Store(doc1, metadata.CurrentVersion);

                await session.SaveChangesAsync();
            }

            using (var query = theStore.QuerySession())
            {
                (await query.LoadAsync <CoffeeShop>(doc1.Id)).Name
                .ShouldBe("Mozart's");
            }
        }
Exemplo n.º 3
0
        public void can_do_multiple_updates_in_a_row_standard()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                session.SaveChanges();
            }

            using (var session = theStore.DirtyTrackedSession())
            {
                var doc2 = session.Load <CoffeeShop>(doc1.Id);
                doc2.Name = "Mozart's";

                session.SaveChanges();

                doc2.Name = "Cafe Medici";

                session.SaveChanges();
            }

            using (var query = theStore.QuerySession())
            {
                query.Load <CoffeeShop>(doc1.Id).Name.ShouldBe("Cafe Medici");
            }
        }
Exemplo n.º 4
0
        public void update_multiple_docs_at_a_time_sad_path()
        {
            var doc1 = new CoffeeShop();
            var doc2 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1, doc2);
                session.SaveChanges();
            }

            using (var session = theStore.DirtyTrackedSession())
            {
                var doc12 = session.Load <CoffeeShop>(doc1.Id);
                doc12.Name = "Mozart's";

                var doc22 = session.Load <CoffeeShop>(doc2.Id);
                doc22.Name = "Dominican Joe's";

                using (var other = theStore.DirtyTrackedSession())
                {
                    other.Load <CoffeeShop>(doc1.Id).Name = "Genuine Joe's";
                    other.Load <CoffeeShop>(doc2.Id).Name = "Cafe Medici";

                    other.SaveChanges();
                }

                var ex = Exception <AggregateException> .ShouldBeThrownBy(() =>
                {
                    session.SaveChanges();
                });

                ex.InnerExceptions.OfType <ConcurrencyException>().Count().ShouldBe(2);
            }
        }
Exemplo n.º 5
0
        public void store_with_the_right_version()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                session.SaveChanges();
            }

            DocumentMetadata metadata;

            using (var session = theStore.QuerySession())
            {
                metadata = session.MetadataFor(doc1);
            }

            using (var session = theStore.OpenSession())
            {
                doc1.Name = "Mozart's";
                session.Store(doc1, metadata.CurrentVersion);

                session.SaveChanges();
            }

            using (var query = theStore.QuerySession())
            {
                query.Load <CoffeeShop>(doc1.Id).Name
                .ShouldBe("Mozart's");
            }
        }
Exemplo n.º 6
0
        public async Task update_multiple_docs_at_a_time_happy_path_async()
        {
            var doc1 = new CoffeeShop();
            var doc2 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1, doc2);
                await session.SaveChangesAsync();
            }

            using (var session = theStore.DirtyTrackedSession())
            {
                var doc12 = await session.LoadAsync <CoffeeShop>(doc1.Id);

                doc12.Name = "Mozart's";

                var doc22 = await session.LoadAsync <CoffeeShop>(doc2.Id);

                doc22.Name = "Dominican Joe's";

                await session.SaveChangesAsync();
            }

            using (var query = theStore.QuerySession())
            {
                (await query.LoadAsync <CoffeeShop>(doc1.Id)).Name.ShouldBe("Mozart's");
                (await query.LoadAsync <CoffeeShop>(doc2.Id)).Name.ShouldBe("Dominican Joe's");
            }
        }
Exemplo n.º 7
0
        public void update_multiple_docs_at_a_time_happy_path()
        {
            var doc1 = new CoffeeShop();
            var doc2 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1, doc2);
                session.SaveChanges();
            }

            using (var session = theStore.DirtyTrackedSession())
            {
                var doc12 = session.Load <CoffeeShop>(doc1.Id);
                doc12.Name = "Mozart's";

                var doc22 = session.Load <CoffeeShop>(doc2.Id);
                doc22.Name = "Dominican Joe's";

                session.SaveChanges();
            }

            using (var query = theStore.QuerySession())
            {
                query.Load <CoffeeShop>(doc1.Id).Name.ShouldBe("Mozart's");
                query.Load <CoffeeShop>(doc2.Id).Name.ShouldBe("Dominican Joe's");
            }
        }
Exemplo n.º 8
0
        public async Task can_do_multiple_updates_in_a_row_standard_async()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                await session.SaveChangesAsync();
            }

            using (var session = theStore.DirtyTrackedSession())
            {
                var doc2 = await session.LoadAsync <CoffeeShop>(doc1.Id);

                doc2.Name = "Mozart's";

                await session.SaveChangesAsync();

                doc2.Name = "Cafe Medici";

                await session.SaveChangesAsync();
            }

            using (var query = theStore.QuerySession())
            {
                (await query.LoadAsync <CoffeeShop>(doc1.Id)).Name.ShouldBe("Cafe Medici");
            }
        }
Exemplo n.º 9
0
        public async Task can_update_with_optimistic_concurrenc_async()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                await session.SaveChangesAsync();
            }

            using (var session = theStore.OpenSession())
            {
                var doc2 = await session.LoadAsync <Shop>(doc1.Id);

                doc2.As <CoffeeShop>().Name = "Mozart's";

                session.Store(doc2);
                await session.SaveChangesAsync();
            }

            using (var session = theStore.QuerySession())
            {
                (await session.LoadAsync <CoffeeShop>(doc1.Id)).Name.ShouldBe("Mozart's");
            }
        }
Exemplo n.º 10
0
        public async Task can_insert_with_optimistic_concurrency_94_async()
        {
            await using var session = theStore.OpenSession();
            var coffeeShop = new CoffeeShop();

            session.Store(coffeeShop);
            await session.SaveChangesAsync();

            (await session.LoadAsync <CoffeeShop>(coffeeShop.Id)).ShouldNotBeNull();
        }
Exemplo n.º 11
0
        public void can_insert_with_optimistic_concurrency()
        {
            using var session = theStore.OpenSession();
            var coffeeShop = new CoffeeShop();

            session.Store(coffeeShop);
            session.SaveChanges();

            session.Load <CoffeeShop>(coffeeShop.Id).ShouldNotBeNull();
        }
Exemplo n.º 12
0
        public void can_store_same_document_multiple_times_with_optimistic_concurrency()
        {
            var doc1 = new CoffeeShop();

            using var session = theStore.OpenSession();
            session.Store(doc1);
            session.Store(doc1);

            session.SaveChanges();
        }
Exemplo n.º 13
0
        public void Bug_669_can_store_and_update_same_document_with_optimistic_concurrency_and_dirty_tracking()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession(tracking: DocumentTracking.DirtyTracking))
            {
                session.Store(doc1);
                doc1.Name = "New Name";
                session.SaveChanges();
            }
        }
Exemplo n.º 14
0
        public async Task update_with_stale_version_async()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                await session.SaveChangesAsync();
            }

            var session1 = theStore.DirtyTrackedSession();
            var session2 = theStore.DirtyTrackedSession();

            var session1Copy = await session1.LoadAsync <CoffeeShop>(doc1.Id);

            var session2Copy = await session2.LoadAsync <CoffeeShop>(doc1.Id);

            try
            {
                session1Copy.Name = "Mozart's";
                session2Copy.Name = "Dominican Joe's";

                // Should go through just fine
                await session2.SaveChangesAsync();

                var ex = await Exception <ConcurrencyException> .ShouldBeThrownByAsync(async() =>
                {
                    await session1.SaveChangesAsync();
                });

                ex.Message.ShouldBe($"Optimistic concurrency check failed for {typeof(Shop).FullName} #{doc1.Id}");
            }
            finally
            {
                session1.Dispose();
                session2.Dispose();
            }

            using (var query = theStore.QuerySession())
            {
                (await query.LoadAsync <CoffeeShop>(doc1.Id)).Name.ShouldBe("Dominican Joe's");
            }
        }
Exemplo n.º 15
0
        public void overwrite_with_stale_version_standard()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                session.SaveChanges();
            }
            #region sample_sample-override-optimistic-concurrency
            var session1 = theStore.OpenSession(new SessionOptions
            {
                ConcurrencyChecks = ConcurrencyChecks.Disabled,
                Tracking          = DocumentTracking.DirtyTracking
            });
            #endregion

            var session2 = theStore.DirtyTrackedSession();

            var session1Copy = session1.Load <CoffeeShop>(doc1.Id);
            var session2Copy = session2.Load <CoffeeShop>(doc1.Id);

            try
            {
                session1Copy.Name = "Mozart's";
                session2Copy.Name = "Dominican Joe's";

                // Should go through just fine
                session2.SaveChanges();

                session1.SaveChanges();
            }
            finally
            {
                session1.Dispose();
                session2.Dispose();
            }

            using (var query = theStore.QuerySession())
            {
                query.Load <CoffeeShop>(doc1.Id).Name.ShouldBe("Mozart's");
            }
        }
Exemplo n.º 16
0
        public async Task store_with_the_right_version_sad_path_async()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                await session.SaveChangesAsync();
            }

            using (var session = theStore.OpenSession())
            {
                doc1.Name = "Mozart's";

                // Some random version that won't match
                session.Store(doc1, Guid.NewGuid());

                await Exception <ConcurrencyException> .ShouldBeThrownByAsync(async() =>
                {
                    await session.SaveChangesAsync();
                });
            }
        }
Exemplo n.º 17
0
        public void can_update_with_optimistic_concurrency_95()
        {
            var doc1 = new CoffeeShop();

            using (var session = theStore.OpenSession())
            {
                session.Store(doc1);
                session.SaveChanges();
            }

            using (var session = theStore.OpenSession())
            {
                var doc2 = session.Load <CoffeeShop>(doc1.Id);
                doc2.Name = "Mozart's";

                session.Store(doc2);
                session.SaveChanges();
            }

            using (var session = theStore.QuerySession())
            {
                session.Load <CoffeeShop>(doc1.Id).Name.ShouldBe("Mozart's");
            }
        }