public void SaveOrUpdate(PageDto item) { if (item == null) { throw new ArgumentNullException("item", "The post must be contains a valid instance"); } Page page = this.Session.Load<Page>(item.Id) ?? new Page { CreatedAt = DateTimeOffset.Now }; if (string.IsNullOrEmpty(item.Author)) { item.Author = Thread.CurrentPrincipal.Identity.Name; } item.MapPropertiesToInstance(page); if (string.IsNullOrEmpty(page.Excerpt)) { page.Excerpt = AbstractHelper.GenerateAbstract(page.Content); } if (string.IsNullOrEmpty(page.Slug)) { page.Slug = SlugHelper.GenerateSlug(page.Title, page.Id, this.GetPostBySlugInternal); } if (page.IsTransient) { ItemComments comments = new ItemComments { Item = new ItemReference { Id = page.Id, Status = page.Status, ItemPublishedAt = page.PublishAt } }; this.Session.Store(comments); page.CommentsId = comments.Id; ItemTrackbacks trackbacks = new ItemTrackbacks { Item = new ItemReference { Id = page.Id, Status = page.Status, ItemPublishedAt = page.PublishAt } }; this.Session.Store(trackbacks); page.TrackbacksId = trackbacks.Id; } this.Session.Store(page); UpdateDenormalizedItemIndex.UpdateIndexes(this.store, this.Session, page); item.Id = RavenIdHelper.Resolve(page.Id); }