private void GetSeedBlogs()
        {
            var blogs = new List<BlogViewModel>();

            using (var context = new KnockoutBasicsContext())
            {
                var data = context.Blogs.Include("Posts").ToList();
                data.ForEach(model => blogs.Add(new BlogViewModel(model)));
            }

            blogs = blogs.OrderByDescending(x => x.BlogId).ToList();

            ViewBag.Json = JsonConvert.SerializeObject(blogs).Replace("'", "\\'");            
        }
        public ActionResult Update(string json)
        {
            var blogs = JsonConvert.DeserializeObject<List<BlogViewModel>>(json);
            var response = new Response { Error = false, Message = "Save successful." };

            try
            {
                using (var context = new KnockoutBasicsContext())
                {
                    foreach (var blog in blogs)
                    {
                        //Add or update blog
                        if (blog.BlogId == 0)
                        {
                            var addMe = blog.GetDataModel();
                            context.Blogs.Add(addMe);
                        }
                        else
                        {
                            var updateBlog = context.Blogs.FirstOrDefault(x => x.BlogId == blog.BlogId);

                            if (updateBlog == null)
                            {
                                response.Error = true;
                                response.Message = string.Format("Unable to find blog id '{0}'.", blog.BlogId);
                                return Json(response);
                            }

                            updateBlog.Name = blog.Name;

                            foreach (var post in blog.Posts)
                            {
                                //Add or update post
                                if (post.PostId == 0)
                                {
                                    var addPost = post.GetDataModel();
                                    addPost.Blog = updateBlog;
                                    context.Posts.Add(addPost);
                                }
                                else
                                {
                                    var updatePost = context.Posts.FirstOrDefault(x => x.PostId == post.PostId);

                                    if (updatePost == null)
                                    {
                                        response.Error = true;
                                        response.Message = string.Format("Unable to find post id '{0}'.", post.PostId);
                                        return Json(response);
                                    }

                                    updatePost.Title = post.Title;
                                    updatePost.Content = post.Content;
                                }
                            }
                        }

                        //Remove any posts...
                        var notNewPostIds = blog.Posts.Where(x => x.PostId != 0).Select(x => x.PostId);
                        var removeThesePosts = context.Posts.Where(x => !notNewPostIds.Contains(x.PostId)
                            && x.Blog.BlogId == blog.BlogId);

                        removeThesePosts.ToList().ForEach(x => context.Posts.Remove(x));
                    }

                    //Remove any blogs...
                    var notNewBlogIds = blogs.Where(x => x.BlogId != 0).Select(x => x.BlogId);
                    var removeTheseBlogs = context.Blogs.Where(x => !notNewBlogIds.Contains(x.BlogId));

                    removeTheseBlogs.ToList().ForEach(x =>
                        {
                            //Remove all of the blog's posts first...
                            var removePostIds = x.Posts.Select(y => y.PostId).ToArray();
                            foreach (var postId in removePostIds)
                            {
                                var removeMe = context.Posts.FirstOrDefault(y => y.PostId == postId);
                                context.Posts.Remove(removeMe);
                            }

                            //Then remove the blog.
                            context.Blogs.Remove(x);
                        });

                    context.SaveChanges();

                    //Requery the database to get updates...
                    blogs = new List<BlogViewModel>();
                    var data = context.Blogs.Include("Posts").ToList();
                    data.ForEach(model => blogs.Add(new BlogViewModel(model)));
                    blogs = blogs.OrderByDescending(x => x.BlogId).ToList();

                    response.Updated = JsonConvert.SerializeObject(blogs);
                }
            }
            catch (Exception ex)
            {
                //Log an error to the database
                using (var context = new KnockoutBasicsContext())
                {
                    var error = new ErrorLog { Message = ex.Message, CallStack = ex.StackTrace };
                    context.ErrorLogs.Add(error);
                    context.SaveChanges();
                }

                response.Error = true;
                response.Message = "An error occurred on the server while trying to save.";
            }

            return Json(response);
        }