//envia um viewmodel com os temas selecionados. Serve para temas de exposições ou temas de utilizadores public List <AssignedTemaData> PopulateAssignedTemaData(ITabelas tabela) { var allTemas = _db.Tema; var tabelaTemas = new HashSet <int>(tabela.Temas.Select(t => t.TemaID)); var viewModel = new List <AssignedTemaData>(); foreach (var tema in allTemas) { viewModel.Add(new AssignedTemaData { TemaID = tema.TemaID, Nome = tema.Nome, Assigned = tabelaTemas.Contains(tema.TemaID) }); } return(viewModel); }
//método que remove ou adiciona temas a uma exposição ou a um utilizador. ITabelas pode ser um utilizador ou uma exposição public void UpdateTemas(string[] selectedTemas, ITabelas tabela, OurDBContext dbContext) { var userAccountTemas = new HashSet <int>(tabela.Temas.Select(t => t.TemaID)); if (selectedTemas == null) { if (tabela.Temas.Count != 0) { foreach (var tema in dbContext.Tema) { if (tabela.Temas.Contains(tema)) { tabela.Temas.Remove(tema); } } } dbContext.Entry(tabela).State = EntityState.Modified; dbContext.SaveChanges(); return; } var selectedTemasHs = new HashSet <string>(selectedTemas); foreach (var tema in dbContext.Tema) { if (selectedTemasHs.Contains(tema.TemaID.ToString())) { if (!userAccountTemas.Contains(tema.TemaID)) { tabela.Temas.Add(tema); } } else { if (userAccountTemas.Contains(tema.TemaID)) { tabela.Temas.Remove(tema); } } } dbContext.Entry(tabela).State = EntityState.Modified; dbContext.SaveChanges(); }