Exemple #1
0
        static void Main(string[] args)
        {
            var documentStore = new Raven.Client.Embedded.EmbeddableDocumentStore { ConnectionStringName = "RavenDB" };
            documentStore.Initialize();

            var session = documentStore.OpenSession();

            documentStore.DatabaseCommands.DeleteByIndex("Raven/DocumentsByEntityName",
                                             new IndexQuery
                                             {
                                                 Query = session.Advanced.LuceneQuery<object>()
                                                 .WhereEquals("Tag", "Posts")
                                                 .ToString()
                                             },
                                             false);

            StreamReader re = File.OpenText("Data.txt");

            JsonTextReader reader = new JsonTextReader(re);
            JArray root = JArray.Load(reader);

            foreach (JObject o in root)
            {
                Post post = new Post();
                post.Id = o["Id"].ToObject<string>();
                post.Title = o["Title"].ToObject<string>();
                post.DateCreated = o["DateCreated"].ToObject<DateTime>();
                post.Body = "<p>"+o["Body"].ToObject<string>()+"</p>";

                if (o["Tags"] != null)
                {
                    List<string> tags = new List<string>();
                    var strippedData = o["Tags"].ToObject<string>().Split(',');
                    foreach (string s in strippedData)
                    {
                        tags.Add(s.Trim());
                    }

                    post.Tags = tags;
                }
                else
                {
                    post.Tags = null;
                }

                post.Published = o["Published"].ToObject<bool>();

                session.Store(post);

            }

            session.SaveChanges();
            Console.WriteLine("Data Imported");
            Console.ReadKey();
        }
Exemple #2
0
        public PostModule()
            : base("/posts")
        {
            DocumentSession = new DocumentSessionProvider().GetSession();

            Get["/page/{pagenumber}"] = parameters =>
                           {
                               int pageNumber = parameters.pagenumber.HasValue ? parameters.pagenumber : 1;

                               var data = DocumentSession.Query<Post>()
                                   .Customize(x => x.WaitForNonStaleResultsAsOfNow())
                                   .OrderBy(x => x.DateCreated)
                                   .ThenBy(x => x.Title);

                               RavenQueryStatistics stats;
                               var pageddata = DocumentSession.Query<Post>()
                                   .Where(x => x.Published)
                                   .Customize(x => x.WaitForNonStaleResultsAsOfNow())
                                   .Statistics(out stats)
                                   .Skip((pageNumber - 1) * 25)
                                   .Take(25)
                                   .OrderBy(x => x.DateCreated)
                                   .ThenBy(x => x.Title)
                                   .ToList(); //ToList to enumerate and get stats

                               Paged<Post> jsonData =
                                   pageddata.Select(
                                       post =>
                                       new Post
                                           {
                                               Id = post.Id,
                                               Body = post.Body.Length > 1200 ? post.Body.Substring(0, 1200) + "..." : post.Body,
                                               DateCreated = post.DateCreated,
                                               Title = post.Title,
                                               Published = post.Published,
                                               Tags = post.Tags
                                           }).ToPaged(pageNumber, stats.TotalResults);

                               return Negotiate
                                   .WithModel(data)
                                   .WithMediaRangeModel("application/json", jsonData)
                                   .WithView("Index");
                           };

            Get[Route.Root().AnyIntAtLeastOnce("id")] = parameters =>
                            {
                                Post model = DocumentSession.Load<Post>((int)parameters.id);
                                return View["Edit", model];
                            };

            Delete[Route.Root().AnyIntAtLeastOnce("id")] = parameters =>
            {
                //DatabaseCommands operations execute immediately, and do not wait for SaveChanges to be called.
                DocumentSession.Advanced.DatabaseCommands.Delete("posts/" + parameters.id, null);
                return "Deleted";
            };

            Post[Route.Root().AnyIntAtLeastOnce("id")] = parameters =>
                            {
                                var model = DocumentSession.Load<Post>((int)parameters.id);
                                this.BindTo(model);
                                DocumentSession.SaveChanges();
                                return Response.AsRedirect("/sugartown/posts/page/1");
                            };

            Get[Route.Root().AnyStringAtLeastOnce("title")] = parameters =>
            {
                string title = ((string)parameters.title).Replace("-", " ");
                Post model = DocumentSession.Query<Post>().FirstOrDefault(x => x.Title == title && x.Published);

                return Negotiate.WithModel(model);
            };

            Get["/tag/{tag}/page/{pagenumber}"] = parameters =>
                                                      {
                                                          string tag = (string)parameters.tag;
                                                          int pageNumber = parameters.pagenumber.HasValue ? parameters.pagenumber : 1;

                                                          RavenQueryStatistics stats;
                                                          IEnumerable<Post> model = DocumentSession.Query<Post>()
                                                              .Where(x => x.Tags.Any(tags => tags == tag) && x.Published)
                                                              .Statistics(out stats)
                                                              .Skip((pageNumber - 1) * 25)
                                                              .Take(25)
                                                              .OrderBy(x => x.DateCreated)
                                                              .ThenBy(x => x.Title)
                                                              .ToList();

                                                          Paged<Post> pagedModel = model.Select(
                                                               post =>
                                                               new Post
                                                               {
                                                                   Id = post.Id,
                                                                   Body = post.Body.Length > 1200 ? post.Body.Substring(0, 1200) + "..." : post.Body,
                                                                   DateCreated = post.DateCreated,
                                                                   Title = post.Title,
                                                                   Published = post.Published,
                                                                   Tags = post.Tags
                                                               }).ToPaged(pageNumber, stats.TotalResults);

                                                          return Negotiate.WithModel(pagedModel);
                                                      };

            Get["/create"] = parameters =>
                            {
                                var model = new Post();
                                return View["Create", model];
                            };

            Post["/create"] = parameters =>
                            {
                                var model = this.Bind<Post>();
                                model.DateCreated = DateTime.Now;
                                DocumentSession.Store(model);
                                DocumentSession.SaveChanges();
                                return Response.AsRedirect("/sugartown/posts/page/1");
                            };
        }