Created
March 6, 2019 22:09
-
-
Save ayende/b13138430a42008f94250d666ed8e1c8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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