Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ayende
Created March 6, 2019 22:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ayende/b13138430a42008f94250d666ed8e1c8 to your computer and use it in GitHub Desktop.
Save ayende/b13138430a42008f94250d666ed8e1c8 to your computer and use it in GitHub Desktop.
public class cadilhac : RavenTestBase
{
public class User
{
public string Name;
public int Age;
}
[Fact]
public void ExploringConcurrencyBehavior()
{
using (var store = GetDocumentStore())
{
using (var s1 = store.OpenSession())
{
s1.Store(new User { Name = "Nick", Age = 99 }, "users/1-A");
s1.SaveChanges();
}
using (var s2 = store.OpenSession())
{
s2.Advanced.UseOptimisticConcurrency = true;
var u2 = s2.Load<User>("users/1-A");
using (var s3 = store.OpenSession())
{
var u3 = s3.Load<User>("users/1-A");
Assert.NotSame(u2, u3);
u3.Age--;
s3.SaveChanges();
}
u2.Age++;
var u2_2 = s2.Load<User>("users/1-A");
Assert.Same(u2, u2_2);
Assert.Equal(1, s2.Advanced.NumberOfRequests);
Assert.Throws<ConcurrencyException>(() => s2.SaveChanges());
Assert.Equal(2, s2.Advanced.NumberOfRequests);
var u2_3 = s2.Load<User>("users/1-A");
Assert.Same(u2, u2_3);
Assert.Equal(2, s2.Advanced.NumberOfRequests);
Assert.Throws<ConcurrencyException>(() => s2.SaveChanges());
}
using (var s4 = store.OpenSession())
{
var u4 = s4.Load<User>("users/1-A");
Assert.Equal(98, u4.Age);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment