public void ParallelQueries_Always_Crash() { // Arrange var user = RandomDataEntityGenerator.CreateUserWithRandomData(); for (int postIndex = 0; postIndex < 10; postIndex++) { var post = RandomDataEntityGenerator.CreatePostWithRandomData(false); user.Posts.Add(post); } TestDataContext.Add(user); TestDataContext.SaveChanges(); // Act / Assert using (var dbContext = CreateTestDataContext()) { var postsQuery = dbContext.Posts; foreach (var post in postsQuery) { // throws an error because same transaction is used = command is already in progress Assert.ThrowsException <NpgsqlOperationInProgressException>(() => { var firstName = post.User.FirstName; }); var posText = post.Text; } } }
public void ParallelQueries_OtherContext_ShouldBeOK() { // Arrange var user = RandomDataEntityGenerator.CreateUserWithRandomData(); for (int postIndex = 0; postIndex < 10; postIndex++) { var post = RandomDataEntityGenerator.CreatePostWithRandomData(false); user.Posts.Add(post); } TestDataContext.Add(user); TestDataContext.SaveChanges(); // Act / Assert using (DataContext context = CreateTestDataContext() , context2 = CreateTestDataContext()) { var postsQuery = context.Posts; foreach (var post in postsQuery) { context2.Attach(post).Reference(x => x.User).Load(); var firstName = post.User.FirstName; var postText = post.Text; } } }
public void GetPostsWithCommentsCreatedInRange_WhenMultipleCommentsPerPost_CorrectAmountReturned() { // Arrange var until = DateTime.Now.AddDays(-1); var from = until.AddDays(-5); var user = RandomDataEntityGenerator.CreateUserWithRandomData(); var post = RandomDataEntityGenerator.CreatePostWithRandomData(false); post.User = user; post.CreatedTime = from.AddDays(1); var comment1 = RandomDataEntityGenerator.CreateCommentWithRandomData(false); comment1.User = user; comment1.Post = post; var comment2 = RandomDataEntityGenerator.CreateCommentWithRandomData(false); comment2.User = user; comment2.Post = post; TestDataContext.Comments.AddRange(new[] { comment1, comment2 }); TestDataContext.SaveChanges(); // Act var result = _SUT.GetPostsWithCommentsCreatedInRange(from, until); // Assert Assert.AreEqual(1, result.Count()); }