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);
                }
            }
        }
예제 #2
0
		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;
		}
예제 #3
0
        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);
                }
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
				}
			}

		}