public ActionResult Criar(Postagem postagem, string Tags_nome, string Post, string[] Hiddens) { if (ModelState.IsValid) { if(WebSecurity.CurrentUserId == -1) return View("NaoLogado"); List<Imagem> lstImagens = new List<Imagem>(); foreach (string strImg in Hiddens) { if (strImg != string.Empty) { var imagem = new Imagem { imagemString = strImg }; lstImagens.Add(imagem); } } postagem.Imagens = lstImagens; //primeiro criar as tags, dpx criar a postagem, tudo separado e por ultimo criar a tagpostagem linkando ambos string[] tags = Tags_nome.Split(','); foreach (var tag in tags) { Tag _novatag = new Tag(); _novatag = storeDB.Tags.SingleOrDefault(x => x.nome == tag); if (_novatag == null) { _novatag = new Tag(); _novatag.nome = tag; storeDB.Tags.Add(_novatag); } } postagem.texto = Post; postagem.DataCriacao = DateTime.Now; postagem.userID = WebSecurity.CurrentUserId; postagem.Titulo.DataCriacao = DateTime.Now; storeDB.Postagens.Add(postagem); storeDB.SaveChanges(); Postagem postagemAux = new Postagem(); postagemAux = storeDB.Postagens.SingleOrDefault(a => a.texto == postagem.texto); foreach (var tag in tags) { Tag _novatag = new Tag(); _novatag = storeDB.Tags.SingleOrDefault(x => x.nome == tag); var _novoPostTag = new TagPostagem { Postagens = postagemAux, Tags = _novatag }; storeDB.TagPostagens.Add(_novoPostTag); } storeDB.SaveChanges(); return RedirectToAction("Index", "Home"); } return View(postagem); }
private static Tag GetOrCreateTag(BlogDbContext context, string name) { var nameToLower = name.ToLower(); var tagEntity = context.Tags .FirstOrDefault(tag => tag.Name == nameToLower); // If entity already exists if (tagEntity != null) { return tagEntity; } var newTagEntity = new Tag() { Name = nameToLower }; context.Tags.Add(newTagEntity); context.SaveChanges(); return newTagEntity; }
// POST api/Posts public HttpResponseMessage PostPost([FromUri] string sessionKey, [FromBody] PostModel post) { return this.PerformOperationAndHandleExceptions(() => { if (!ModelState.IsValid) { throw new ArgumentException("Invalid model binding state"); // return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } int userId = this.ValidateSessionKey(sessionKey); if (post.Title.Length == 0 || post.Text.Length == 0) { throw new ArgumentException("Post Title and Text should not be empty"); } // Add title tags to the existing list of tags string[] titleTags = post.Title.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var tag in titleTags) { if (!post.Tags.Contains(tag)) { post.Tags.Add(tag); } } using (var context = new BlogEntities()) { if (context.Users.Find(userId) == null) { throw new ArgumentException("Invalid session key - user not exists"); } using (var scope = new System.Transactions.TransactionScope()) { var newPost = new Post() { Title = post.Title, Text = post.Text, User = context.Users.Find(userId), PostDate = DateTime.Now }; foreach (var tag in post.Tags) { var tagToLower = tag.ToLower(); var newTag = context.Tags.FirstOrDefault(t => t.TagName == tagToLower); if (newTag == null) { newTag = new Tag() { TagName = tagToLower }; context.Tags.Add(newTag); } newPost.Tags.Add(newTag); } context.Posts.Add(newPost); context.SaveChanges(); scope.Complete(); return Request.CreateResponse(HttpStatusCode.Created, new { Title = newPost.Title, Id = newPost.PostId }); } } }); }