public void write_then_read_from_complex_entity_types() { using (EmbeddableDocumentStore documentStore = NewDocumentStore()) { IndexCreation.CreateIndexes(typeof(QuestionWithVoteTotalIndex).Assembly, documentStore); string answerId = CreateEntities(documentStore); // Working using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.Id == answerId) .As <AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); Assert.NotNull(answerInfo.Question); } // Failing using (IDocumentSession session = documentStore.OpenSession()) { AnswerVoteEntity[] votes = session.Query <AnswerVote, Votes_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.AnswerId == answerId) .As <AnswerVoteEntity>() .ToArray(); Assert.NotNull(votes); Assert.True(votes.Length == 2); Assert.NotNull(votes[0].Answer); Assert.True(votes[0].Answer.Id == answerId); Assert.NotNull(votes[1].Answer); Assert.True(votes[1].Answer.Id == answerId); } } }
public static string CreateEntities(IDocumentStore documentStore) { const string questionId = @"question/259"; const string answerId = @"answer/540"; using (IDocumentSession session = documentStore.OpenSession()) { var user = new User { Id = @"user/222", DisplayName = "John Doe" }; session.Store(user); var question = new Question { Id = questionId, Title = "How to do this in RavenDb?", Content = "I'm trying to find how to model documents for better DDD support.", UserId = @"user/222" }; session.Store(question); var answer = new AnswerEntity { Id = answerId, Question = question, Content = "This is doable", UserId = user.Id }; session.Store(new Answer { Id = answer.Id, UserId = answer.UserId, QuestionId = answer.Question.Id, Content = answer.Content }); var vote1 = new AnswerVoteEntity { Id = "votes/1", Answer = answer, QuestionId = questionId, Delta = 2 }; session.Store(new AnswerVote { QuestionId = vote1.QuestionId, AnswerId = vote1.Answer.Id, Delta = vote1.Delta }); var vote2 = new AnswerVoteEntity { Id = "votes/2", Answer = answer, QuestionId = questionId, Delta = 3 }; session.Store(new AnswerVote { QuestionId = vote2.QuestionId, AnswerId = vote2.Answer.Id, Delta = vote2.Delta }); session.SaveChanges(); } return answerId; }
public void will_fail_with_request_headers_too_long() { using (var server = GetNewServer()) using (var store = new DocumentStore { Url = "http://localhost:8079" }.Initialize()) { new Answers_ByAnswerEntity().Execute(store); new Answers_ByAnswerEntityTransformer().Execute(store); store.Conventions.MaxNumberOfRequestsPerSession = 1000000; // 1 Million CreateEntities(store); WaitForAllRequestsToComplete(server); server.Server.ResetNumberOfRequests(); const string Content = "This is doable"; using (var session = store.OpenSession()) { RavenQueryStatistics stats; AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Statistics(out stats) .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()) .OrderBy(x => x.Content) .Where(x => x.Content == (Content)) .TransformWith <Answers_ByAnswerEntityTransformer, AnswerEntity>() .Skip(0).Take(1) .SingleOrDefault(); for (int i = 0; i < 100; i++) { answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Statistics(out stats) .Where(x => x.Content == (Content)) .OrderBy(x => x.Content) .TransformWith <Answers_ByAnswerEntityTransformer, AnswerEntity>() .Skip(0).Take(1) .SingleOrDefault(); Assert.NotNull(answerInfo); } } } }
public void object_id_should_not_be_null_after_loaded_from_transformation() { using (EmbeddableDocumentStore documentStore = NewDocumentStore()) { new Answers_ByAnswerEntity().Execute(documentStore); const string questionId = @"question/259"; string answerId = CreateEntities(documentStore); using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.Id == answerId) .As <AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); Assert.NotNull(answerInfo.Question); Assert.NotNull(answerInfo.Question.Id); Assert.True(answerInfo.Question.Id == questionId); } } }
public static string CreateEntities(IDocumentStore documentStore, int index) { string questionId = @"question/259" + index; string answerId = @"answer/540" + index; using (IDocumentSession session = documentStore.OpenSession()) { var user = new User { Id = @"user/222" + index, DisplayName = "John Doe" + index }; session.Store(user); var question = new Question { Id = questionId, Title = "How to do this in RavenDb?" + index, Content = "I'm trying to find how to model documents for better DDD support." + index, UserId = @"user/222" + index }; session.Store(question); var answer = new AnswerEntity { Id = answerId, Question = question, Content = "This is doable", UserId = user.Id }; session.Store(new Answer { Id = answer.Id, UserId = answer.UserId, QuestionId = answer.Question.Id, Content = answer.Content }); var vote1 = new AnswerVoteEntity { Id = "votes/1" + index, Answer = answer, QuestionId = questionId, Delta = 2 }; session.Store(new AnswerVote { QuestionId = vote1.QuestionId, AnswerId = vote1.Answer.Id, Delta = vote1.Delta }); var vote2 = new AnswerVoteEntity { Id = "votes/2" + index, Answer = answer, QuestionId = questionId, Delta = 3 }; session.Store(new AnswerVote { QuestionId = vote2.QuestionId, AnswerId = vote2.Answer.Id, Delta = vote2.Delta }); session.SaveChanges(); } return(answerId); }
public void will_timeout_query_after_some_time() { using (GetNewServer()) using (var store = new DocumentStore { Url = "http://localhost:8080" }.Initialize()) { new Answers_ByAnswerEntity().Execute(store); var answerId = ""; store.Conventions.MaxNumberOfRequestsPerSession = 1000000; // 1 Million CreateEntities(store, 0); const string content = "This is doable"; using (var session = store.OpenSession()) { RavenQueryStatistics stats; AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Statistics(out stats) .Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()) .OrderBy(x => x.Content) .Where(x => x.Content.Contains(content)) .Skip(0).Take(1) .As <AnswerEntity>() .FirstOrDefault(); Assert.NotNull(answerInfo); answerId = answerInfo.Id; } List <Thread> threads = new List <Thread>(); object locker = new object(); for (int k = 0; k < 100; k++) { var thread = new Thread(() => { lock (locker) { using (var session = store.OpenSession()) { for (int i = 0; i < 100; i++) { var answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .OrderBy(x => x.Content) .Skip(0).Take(1) .As <AnswerEntity>() .FirstOrDefault(); Assert.NotNull(answerInfo); } } using (var session = store.OpenSession()) { var answer = session.Load <Answer>(answerId); Assert.NotNull(answer); answer.Content += k.ToString(); session.Store(answer); session.SaveChanges(); } } }); threads.Add(thread); thread.Start(); } foreach (var thread in threads) { thread.Join(); } } }
public void will_work_normally_when_querying_multiple_times() { using (EmbeddableDocumentStore documentStore = NewDocumentStore()) { new Answers_ByAnswerEntity().Execute(documentStore); const string Content = "This is doable"; const string UserId = @"user/222"; const string answerId = @"answer/540"; using (IDocumentSession session = documentStore.OpenSession()) { var user = new User { Id = @"user/222", DisplayName = "John Doe" }; session.Store(user); var answer = new AnswerEntity { Id = answerId, Question = null, Content = "This is doable", UserId = user.Id }; session.Store(new Answer { Id = answer.Id, UserId = answer.UserId, QuestionId = "", Content = answer.Content }); session.SaveChanges(); } // Working using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As <AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); AnswerEntity answerInfo2 = session.Query <Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As <AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo2); } // Failing using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query <Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As <AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); } } }
public void will_work_normally_when_querying_multip_times() { using (EmbeddableDocumentStore documentStore = NewDocumentStore()) { new Answers_ByAnswerEntity().Execute(documentStore); const string Content = "This is doable"; const string UserId = @"user\222"; const string answerId = @"answer\540"; using (IDocumentSession session = documentStore.OpenSession()) { var user = new User { Id = @"user\222", DisplayName = "John Doe" }; session.Store(user); var answer = new AnswerEntity { Id = answerId, Question = null, Content = "This is doable", UserId = user.Id }; session.Store(new Answer { Id = answer.Id, UserId = answer.UserId, QuestionId = "", Content = answer.Content }); session.SaveChanges(); } // Working using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query<Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As<AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); AnswerEntity answerInfo2 = session.Query<Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As<AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo2); } // Failing using (IDocumentSession session = documentStore.OpenSession()) { AnswerEntity answerInfo = session.Query<Answer, Answers_ByAnswerEntity>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(x => x.UserId == UserId && x.Content == Content) .As<AnswerEntity>() .SingleOrDefault(); Assert.NotNull(answerInfo); } } }