private static ISitePage GetSitePage(DbSitePage p) { //make sure Sections Collection is Set p.Sections = p.Items?.GroupBy(i => i.SectionKey).Select(g => new PageSection() { Key = g.Key, Items = g.Select(i => new ContentItem() { Template = i.Template, Page = p, Values = JsonConvert.DeserializeObject<Dictionary<string, string>>(i.Values) }).ToList<IContentItem>() ?? new List<IContentItem>() }).ToList<IPageSection>() ?? new List<IPageSection>(); return p; }
public void StoreSitePage(ISitePage sitePage) { var oldPage = Context.Pages.FirstOrDefault(p => p.Url == sitePage.Url); if (oldPage != null) { oldPage.Template = sitePage.Template; oldPage.Layout = sitePage.Layout; oldPage.Title = sitePage.Title; oldPage.Created = sitePage.Created; oldPage.LastModified = DateTime.Now; oldPage.MetaTitle = sitePage.MetaTitle; oldPage.MetaDescription = sitePage.MetaDescription; oldPage.ShowInMenu = sitePage.ShowInMenu; oldPage.SortOrder = sitePage.SortOrder; oldPage.Visible = sitePage.Visible; Context.Pages.Update(oldPage); //todo(rc): can this be done without? Context.RemoveRange(Context.ContentItems.Where(c => c.PageUrl == sitePage.Url)); Context.SaveChanges(); //need to clear because items are removed but still in page.items collection oldPage.Items.Clear(); foreach (var section in sitePage.Sections.Where(s => s.Items.Any())) { Context.AddRange(section.Items.Select((item, index) => new DbContentItem() { Template = item.Template, PageUrl = sitePage.Url, SectionKey = section.Key, Sortorder = index + 1, Values = JsonConvert.SerializeObject(item.Values) })); } } else { DbSitePage dbPage = new DbSitePage() { Url = sitePage.Url, Template = sitePage.Template, Layout = sitePage.Layout, Title = sitePage.Title, Created = sitePage.Created, LastModified = DateTime.Now, MetaTitle = sitePage.MetaTitle, MetaDescription = sitePage.MetaDescription, ShowInMenu = sitePage.ShowInMenu, SortOrder = sitePage.SortOrder, Visible = sitePage.Visible }; Context.Pages.Add(dbPage); foreach (var section in sitePage.Sections.Where(s => s.Items.Any())) { Context.AddRange(section.Items.Select((item, index) => new DbContentItem() { Template = item.Template, PageUrl = sitePage.Url, SectionKey = section.Key, Sortorder = index + 1, Values = JsonConvert.SerializeObject(item.Values) })); } } Context.SaveChanges(); }