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(); } }
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"); } }
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"); } }
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); } }
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"); } }
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"); } }
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"); } }
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"); } }
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"); } }
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(); }
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(); }
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(); }
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(); } }
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"); } }
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"); } }
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(); }); } }
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"); } }