// PUT api/Posts/5
 public HttpResponseMessage PutPost(Post post)
 {
     _db.Posts.Remove(_db.Posts.Include(p => p.Tags).Include(p => p.Comments).SingleOrDefault(p => p.Id == post.Id));
     post.Id = post.Id;
     UpdateTag(post);
     _db.Posts.Add(post);
     _db.SaveChanges();
     return Request.CreateResponse(HttpStatusCode.OK);
 }
        // POST api/Posts
        public HttpResponseMessage PostPost(Post post)
        {
            post.DateCreated = DateTime.Now;
            UpdateTag(post);
            post.Id = Guid.NewGuid();
            _db.Posts.Add(post);
            _db.SaveChanges();

            var response = Request.CreateResponse(HttpStatusCode.Created, post);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = post.Id }));
            return response;
        }
        // update or insert tag depend if tag exist or not
        private Post UpdateTag(Post post)
        {
            var tagList = post.Tags.ToList();
            post.Tags.Clear();

            foreach (var tag in tagList)
            {
                var tagText = tag.TagText.Trim();

                if (!string.IsNullOrWhiteSpace(tagText))
                {
                    var tagDb = _db.Tags.FirstOrDefault(t => t.TagText == tagText);
                    if (tagDb != null)
                    {
                        post.Tags.Add(tagDb);
                    }
                    else
                    {
                        post.Tags.Add(new Tag{ TagText = tagText });
                    }
                }
            }

            return post;
        }