/// <summary> /// deletes criterions by criterionId /// </summary> /// <param name="criterionIdList">list of criteria</param> /// <param name="userId">user who is performing this operation</param> public static void DeleteCriterions(List <int> criterionIdList, int userId) { Criterion crit; ApplicationDBEntities ctx = new ApplicationDBEntities(); if (criterionIdList == null || criterionIdList.Count == 0) { return; } foreach (int id in criterionIdList) { crit = ctx.Criterion.Find(id); ctx.Criterion.Remove(crit); ctx.Entry(crit).State = EntityState.Deleted; ctx.SaveChanges(); //changes to historytable HCriterion hcrit = new HCriterion(); hcrit.ChangeDate = DateTime.Now; hcrit.CriterionId = id; hcrit.UserId = userId; hcrit.Action = "criterion deleted (" + crit.Name + ")"; hcrit.Name = crit.Name; hcrit.Description = crit.Description; hcrit.Issue = crit.Issue; hcrit.Weight = crit.Weight; hcrit.WeightPC = crit.WeightPC; ctx.HCriterion.Add(hcrit); ctx.Entry(hcrit).State = EntityState.Added; ctx.SaveChanges(); } ctx.Dispose(); }
/// <summary> /// saves user review for issue /// </summary> /// <param name="review"></param> public static void SaveIssueReview(Review review) { ApplicationDBEntities ctx = new ApplicationDBEntities(); HReview hreview = ctx.HReview.Create(); hreview.ChangeDate = DateTime.Now; hreview.IssueId = review.IssueId; hreview.UserId = review.UserId; if (ctx.Review.Where(x => x.IssueId == review.IssueId && x.UserId == review.UserId).Count() > 0) { hreview.Action = "Review updated"; Review dbReview = ctx.Review.Where(x => x.IssueId == review.IssueId && x.UserId == review.UserId).FirstOrDefault(); dbReview.Rating = review.Rating; dbReview.Explanation = review.Explanation; ctx.Entry(dbReview).State = System.Data.Entity.EntityState.Modified; } else { hreview.Action = "Review added"; ctx.Review.Add(review); ctx.Entry(review).State = System.Data.Entity.EntityState.Added; } ctx.HReview.Add(hreview); ctx.Entry(hreview).State = System.Data.Entity.EntityState.Added; ctx.SaveChanges(); ctx.Dispose(); }
/// <summary> /// returns root issues /// </summary> /// <returns>root issue of an child issue</returns> public static List <Issue> RootIssues(int?issueId, ApplicationDBEntities ctx) { List <Issue> parentList = new List <Issue>(); if (issueId == -1) { return(parentList); } int?parent = ctx.Issue.Where(x => x.Id == issueId).FirstOrDefault().Parent; if (parent == null) { return(parentList); } else { Issue parentIssue = ctx.Issue.AsNoTracking().Where(x => x.Id == issueId).FirstOrDefault(); parentList.Add(parentIssue); List <Issue> recIssues = RootIssues(parentIssue.Parent, ctx); if (recIssues != null) { parentList.AddRange(recIssues); } } return(parentList); }
/// <summary> /// registers a user to the system /// </summary> /// <param name="email"></param> /// <param name="firstName"></param> /// <param name="lastName"></param> /// <param name="password"></param> /// <param name="secretQuestion"></param> /// <param name="answer"></param> /// <param name="stakeholderDescrip"></param> /// <returns>positive user-id if user is created</returns> public static bool Register(string email, string firstName, string lastName, string password, string secretQuestion, string answer, string stakeholderDescrip) { ApplicationDBEntities ctx = new ApplicationDBEntities(); try { var user = ctx.User.Create(); user.Email = email; user.FirstName = firstName; user.LastName = lastName; user.PasswordHash = CustomEnrypt.Encrypt(password); user.SecretQuestion = secretQuestion; user.Answer = answer; user.StakeholderDescription = stakeholderDescrip; user = ctx.User.Add(user); ctx.SaveChanges(); return(true); }catch (Exception ex) { Console.WriteLine(ex.Message); } ctx.Dispose(); return(false); }
/// <summary> /// returns all isses which the user have access to /// </summary> /// <param name="userId"></param> /// <returns></returns> public static List <Issue> UserIssues(int userId) { User user = UserOp.GetUser(userId); ApplicationDBEntities ctx = new ApplicationDBEntities(); List <Issue> l = ctx.Database.SqlQuery <Issue>("SELECT * FROM Issue WHERE Id IN (SELECT IssueId FROM AccessRight Where UserId =" + userId + ")").ToList(); var query = from Issue in ctx.Issue.AsNoTracking() where (from AccessRight in ctx.AccessRight where AccessRight.UserId == userId select new { AccessRight.IssueId }).Contains(new { IssueId = Issue.Id }) select Issue; List <Issue> list = new List <Issue>(); foreach (Issue issue in query.AsNoTracking()) { list.Add(issue); } ctx.Dispose(); return(l); }
/// <summary> /// returns alternatives of issue /// </summary> /// <param name="issueId"></param> /// <param name="userId">user who is performing this operation</param> /// <returns></returns> public static List <Alternative> GetIssueAlternatives(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <Alternative> list = ctx.Alternative.AsNoTracking().Where(x => x.IssueId == issueId).ToList(); return(list); }
/// <summary> /// grants view access to all parent issues /// </summary> /// <param name="userId">user id</param> /// <param name="issueId">issue id</param> private static void GrantAccess(int userId, int issueId, ApplicationDBEntities ctx) { List <Issue> parentList = IssueOp.RootIssues(issueId, ctx); foreach (Issue i in parentList) { if (i.AccessRight.Where(x => x.UserId == userId).Count() == 0) { AccessRight ar = new AccessRight(); ar.UserId = userId; ar.IssueId = i.Id; ar.Right = "V"; ar.MailNotification = false; ar.NotificationLevel = ""; ar.SelfAssesmentDescr = ""; ar.SelfAssessmentValue = 0; ctx.AccessRight.Add(ar); ctx.Entry(ar).State = EntityState.Added; try { ctx.SaveChanges(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
/// <summary> /// returns true if user has to update selfassessment /// </summary> /// <param name="issueId"></param> /// <param name="userId"></param> /// <returns></returns> public static bool SelfAssessmentActionRequired(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); bool ret; string status = ctx.Issue.Find(issueId).Status; if (status == "CREATING" || status == "BRAINSTORMING1") { AccessRight ar = ctx.AccessRight.Find(userId, issueId); if (ar.SelfAssessmentValue == 0 && ar.Right != "V") { ret = true; } else { ret = false; } } else { ret = false; } ctx.Dispose(); return(ret); }
/// <summary> /// /// </summary> /// <param name="issueId">issue id</param> /// <param name="userId">user id</param> /// <returns>access right for issue and user</returns> public static AccessRight GetAccessRight(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); AccessRight ar = ctx.AccessRight.AsNoTracking().Where(x => x.IssueId == issueId && x.UserId == userId).FirstOrDefault(); return(ar); }
/// <summary> /// updates slefassesment of an User /// </summary> /// <param name="value">self assessment value</param> /// <param name="description">self assessment description</param> public static void UpdateSelfAssesment(double value, string description, int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); AccessRight right = ctx.AccessRight.AsNoTracking().Where(x => x.IssueId == issueId && x.UserId == userId).FirstOrDefault(); bool update = false; if (right.SelfAssessmentValue != value) { right.SelfAssessmentValue = value; update = true; } if (right.SelfAssesmentDescr != description) { right.SelfAssesmentDescr = description; update = true; } if (update) { HAccessRight har = new HAccessRight(); har.SelfAssesmentDescr = right.SelfAssesmentDescr; har.SelfAssessmentValue = right.SelfAssessmentValue; har.ChangeDate = System.DateTime.Now; har.IssueId = right.IssueId; har.UserId = right.UserId; har.Action = "Selfassessment updated"; ctx.HAccessRight.Add(har); ctx.Entry(har).State = EntityState.Added; ctx.Entry(right).State = EntityState.Modified; ctx.SaveChanges(); } ctx.Dispose(); }
/// <summary> /// removes user from issue /// </summary> /// <param name="accessRight">access right to be removed</param> /// <param name="userId">user who is delteing access right</param> /// <returns>bool if successful</returns> public static bool RemoveAccessRight(AccessRight accessRight, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); try { using (var dbContextTransaction = ctx.Database.BeginTransaction()) { ctx.Database.ExecuteSqlCommand("delete from [appSchema].[HAccessRight] WHERE UserId = {0} AND IssueId ={1}", accessRight.UserId, accessRight.IssueId); ctx.Database.ExecuteSqlCommand("delete from [appSchema].[AccessRight] WHERE UserId = {0} AND IssueId ={1}", accessRight.UserId, accessRight.IssueId); dbContextTransaction.Commit(); HAccessRight har = new HAccessRight(); har.ChangeDate = DateTime.Now; har.IssueId = accessRight.IssueId; har.UserId = userId; User u = ctx.User.Find(accessRight.UserId); u = ctx.User.Find(accessRight.UserId); har.Action = u.FirstName + " " + u.LastName + " removed"; har.SelfAssesmentDescr = ""; har.SelfAssessmentValue = 0; ctx.HAccessRight.Add(har); ctx.Entry(har).State = EntityState.Added; ctx.SaveChanges(); } ctx.Dispose(); return(true); } catch (Exception ex) { Console.WriteLine(ex.Message); return(false); } }
/// <summary> /// sets a decision for an issue /// </summary> /// <param name="decision">the decision</param> /// <param name="userId">user who is performing this operation</param> public static void MakeDecision(Decision decision, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); HDecision dec = new HDecision(); if (ctx.Decision.Where(x => x.IssueId == decision.IssueId).Count() == 0) { ctx.Decision.Add(decision); ctx.Entry(decision).State = EntityState.Added; dec.Action = "Decision made"; } else { Decision existingD = ctx.Decision.Find(decision.IssueId); existingD.AlternativeId = decision.AlternativeId; existingD.Explanation = decision.Explanation; ctx.Entry(existingD).State = EntityState.Modified; dec.Action = "Decision changed"; } dec.ChangeDate = DateTime.Now; dec.IssueId = decision.IssueId; dec.UserId = userId; dec.AlternativeId = decision.AlternativeId; dec.Explanation = decision.Explanation; ctx.HDecision.Add(dec); ctx.Entry(dec).State = EntityState.Added; ctx.SaveChanges(); ctx.Dispose(); }
/// <summary> /// returns all criterionweights of an Issue /// </summary> /// <param name="issueId"></param> /// <param name="userId">user who is performing this operation</param> /// <returns></returns> public static List <CriterionWeight> GetIssueWeights(int issueId, int userId) { List <CriterionWeight> list = new List <CriterionWeight>(); CriterionWeight cw; ApplicationDBEntities ctx = new ApplicationDBEntities(); var query = from CriterionWeight in ctx.CriterionWeight where (from Criterion in ctx.Criterion where Criterion.Issue == issueId select new { Criterion.Id }).Contains(new { Id = CriterionWeight.CriterionId }) select new { UserId = CriterionWeight.UserId, CriterionId = CriterionWeight.CriterionId, Weight = CriterionWeight.Weight }; foreach (var c in query.AsNoTracking()) { cw = new CriterionWeight(); cw.CriterionId = c.CriterionId; cw.Weight = c.Weight; cw.UserId = c.UserId; list.Add(cw); } ctx.Dispose(); return(list); }
/// <summary> /// deletes list of alternatives /// </summary> /// <param name="alternativeIdList">list of to deleting alternative ids</param> /// <param name="userId"></param> public static void DeleteAlternatives(List <int> alternativeIdList, int userId) { Alternative alt; ApplicationDBEntities ctx = new ApplicationDBEntities(); if (alternativeIdList == null || alternativeIdList.Count() == 0) { alternativeIdList = new List <int>(); } foreach (int id in alternativeIdList) { alt = ctx.Alternative.Find(id); ctx.Alternative.Remove(alt); ctx.Entry(alt).State = EntityState.Deleted; ctx.SaveChanges(); HAlternative halt = new HAlternative(); halt.ChangeDate = DateTime.Now; halt.AlternativeId = alt.Id; halt.UserId = userId; halt.Action = "alternative deleted (" + alt.Name + ")"; halt.Name = alt.Name; halt.Description = alt.Description; halt.Reason = alt.Reason; halt.Rating = alt.Rating; halt.IssueId = alt.IssueId; ctx.HAlternative.Add(halt); ctx.Entry(halt).State = EntityState.Added; ctx.SaveChanges(); } ctx.Dispose(); CommentOp.DeleteAlternativeComments(alternativeIdList); }
/// <summary> /// gets list of criterionweights which the user should fill out /// </summary> /// <param name="issueId"></param> /// <param name="userId">user who is performing the operation</param> /// <returns></returns> public static List <CriterionWeight> GetEmptyWeights(int issueId, int userId) { CriterionWeight cw; ApplicationDBEntities ctx = new ApplicationDBEntities(); List <CriterionWeight> list = new List <CriterionWeight>(); var query = from Criterion in ctx.Criterion where Criterion.Issue == issueId select new { Id = Criterion.Id, Name = Criterion.Name, Description = Criterion.Description, Issue = Criterion.Issue, Weight = Criterion.Weight, WeightPC = Criterion.WeightPC }; foreach (var c in query.AsNoTracking()) { cw = new CriterionWeight(); cw.CriterionId = c.Id; cw.UserId = userId; cw.Weight = 0.0; list.Add(cw); } ctx.Dispose(); return(list); }
/// <summary> /// gets decision trustworthiness /// </summary> /// <param name="issueId">issue id</param> /// <returns>list of users names</returns> public static List <string> GetDecisionTrustwortiness(int issueId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <string> list = new List <string>(); List <User> userList = ctx.User.ToList(); string query = "SELECT distinct(un.UserId) FROM" + "(SELECT ir.UserId FROM InformationRead ir Where [Read] = 0 AND ir.TName Like 'DTEvaluation' AND FK LIKE {0} and ir.UserId IN " + "(SELECT UserId From Rating Where AlternativeId in (Select Id From Alternative Where IssueId = {0})) " + "UNION " + "SELECT ir.UserId FROM InformationRead ir Where [Read] = 0 AND ir.TName Like 'DTCritWeight' AND FK LIKE {0} and ir.UserId IN " + " (SELECT UserId From CriterionWeight Where CriterionId in (Select Id From Criterion Where Issue = {0}))) un"; var result = ctx.Database.SqlQuery <int>(query, issueId); User u; foreach (int userId in result) { u = userList.Find(x => x.Id == userId); list.Add(u.FirstName + ' ' + u.LastName); } ctx.Dispose(); return(list); }
/// <summary> /// returns true if user has to evaluate /// </summary> /// <param name="issueId"></param> /// <param name="userId"></param> /// <returns></returns> public static bool GetRatingActionRequired(int issueId, int userId) { bool ret; ApplicationDBEntities ctx = new ApplicationDBEntities(); AccessRight ar = ctx.AccessRight.Find(userId, issueId); if (ctx.Issue.Find(issueId).Status == "EVALUATING" && ar.Right != "V") { List <Alternative> aList = ctx.Alternative.Where(x => x.IssueId == issueId).ToList(); if (aList.Count != 0) { int id = aList.FirstOrDefault().Id; List <Rating> rList = ctx.Rating.Where(x => x.AlternativeId == id && x.UserId == userId).ToList(); if (rList == null || rList.Count == 0) { ret = true; } else { ret = false; } } else { ret = false; } } else { ret = false; } ctx.Dispose(); return(ret); }
/// <summary> /// returns a List of Usernames /// </summary> /// <param name="userIds"></param> /// <returns></returns> public static List <KeyValuePair <int, string> > GetUserNames(List <int> userIds) { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <KeyValuePair <int, string> > list = new List <KeyValuePair <int, string> >(); string name; var query = from User in ctx.User where userIds.Contains(User.Id) select new { User.Id, User.FirstName, User.LastName }; foreach (var person in query) { name = person.FirstName + " " + person.LastName; list.Add(new KeyValuePair <int, string>(person.Id, name)); } ctx.Dispose(); return(list); }
/// <summary> /// /// </summary> /// <param name="issueId">issue id</param> /// <param name="userId">user id</param> /// <returns>list of changes made from user for issue</returns> public static List <Changes_View> GetUserChanges(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <Changes_View> list = ctx.Changes_View.AsNoTracking().Where(x => x.IssueId == issueId && x.UserId == userId).OrderByDescending(x => x.ChangeDate).ToList(); ctx.Dispose(); return(list); }
/// <summary> /// gets the accessright for user of an issue /// </summary> /// <param name="userId">user id</param> /// <param name="issueId">issue id</param> /// <returns></returns> public static AccessRight AccessRightOfUserForIssue(int userId, int issueId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); AccessRight right = ctx.AccessRight.AsNoTracking().Where(x => x.IssueId == issueId && x.UserId == userId).FirstOrDefault(); ctx.Dispose(); return(right); }
/// <summary> /// returns all available Tags /// </summary> /// <returns></returns> public static List <Tag> GetAllTags() { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <Tag> list = ctx.Tag.AsNoTracking().ToList(); ctx.Dispose(); return(list); }
/// <summary> /// returns all Criteria of an Issue /// </summary> /// <param name="issueId"></param> /// <param name="userId">user who is performing this operation</param> /// <returns></returns> public static List <Criterion> GetIssueCriterions(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <Criterion> list = ctx.Criterion.AsNoTracking().Where(x => x.Issue == issueId).ToList(); ctx.Dispose(); return(list); }
/// <summary> /// returns title of an issue /// </summary> /// <param name="issueId"></param> /// <returns></returns> public static string IssueTitle(int issueId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); string title = ctx.Issue.Where(x => x.Id == issueId).FirstOrDefault().Title; ctx.Dispose(); return(title); }
/// <summary> /// retrieves user by Id /// </summary> /// <param name="userId"></param> /// <returns></returns> public static User GetUser(int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); User user = ctx.User.AsNoTracking().Where(x => x.Id == userId).FirstOrDefault(); ctx.Dispose(); return(user); }
/// <summary> /// returns all available users /// </summary> /// <returns></returns> public static List <User> GetAllUsers() { ApplicationDBEntities ctx = new ApplicationDBEntities(); List <User> list = ctx.User.AsNoTracking().ToList(); ctx.Dispose(); return(list); }
/// <summary> /// gets decision for an Issue /// </summary> /// <param name="issueId"></param> /// <param name="userId">user who is performing this operation</param> /// <returns></returns> public static Decision GetDecision(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); Decision decision = ctx.Decision.AsNoTracking().Where(x => x.IssueId == issueId).FirstOrDefault(); ctx.Dispose(); return(decision); }
/// <summary> /// returns all available issues /// </summary> /// <param name="issueId"></param> /// <returns></returns> public static Issue GetIssueById(int issueId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); Issue issue = ctx.Issue.AsNoTracking().Where(x => x.Id == issueId).FirstOrDefault(); ctx.Dispose(); return(issue); }
/// <summary> /// marks issue as read for user /// </summary> /// <param name="issueId">issue id</param> /// <param name="userId">user id</param> /// <returns>true if successfull</returns> public static bool MarkIssue(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); DbCommand cmd; string sql; bool marked = false; ctx.Database.Connection.Open(); sql = "select count(*) from InformationRead Where TName Like 'Issue' AND UserId = {0} AND [Read] = 0 AND FK LIKE {1}"; if (ctx.Database.SqlQuery <int>(sql, userId, issueId).FirstOrDefault() > 0) { cmd = ctx.Database.Connection.CreateCommand(); sql = "update appSchema.InformationRead SET [Read] = 1 WHERE TName LIKE 'Issue' and FK LIKE '" + issueId + "' AND UserId = " + userId; cmd.CommandText = sql; cmd.CommandType = System.Data.CommandType.Text; cmd.ExecuteNonQuery(); //decision trustworthiness weighting if (ctx.Issue.Find(issueId).Status == "BRAINSTORMING2") { //if user has read criteria info and now issue info then mark DT Criteria True sql = "select count(*) from InformationRead Where TName Like 'Criterion' AND UserId = {0} AND [Read] = 0 AND FK IN (SELECT Id From Criterion Where Issue = {1})"; if (ctx.Database.SqlQuery <int>(sql, userId, issueId).FirstOrDefault() == 0) { cmd = ctx.Database.Connection.CreateCommand(); sql = "update appSchema.InformationRead SET [Read] = 1 WHERE TName LIKE 'DTCritWeight' and FK LIKE '" + issueId + "' AND UserId = " + userId; cmd.CommandText = sql; cmd.CommandType = System.Data.CommandType.Text; cmd.ExecuteNonQuery(); } } //decision trustworthiness evaluation if (ctx.Issue.Find(issueId).Status == "EVALUATING") { //if user has read criteria, alternatives info and now issue info then mark DT Evaluation True sql = "select count(*) from InformationRead Where UserId = {0} AND [Read] = 0 AND " + "(TName Like 'Criterion' AND FK IN (SELECT Id From Criterion Where Issue = {1}) OR " + "TName Like 'Alternative' AND FK IN (Select Id From Alternative Where IssueId = {1}))"; if (ctx.Database.SqlQuery <int>(sql, userId, issueId).FirstOrDefault() == 0) { cmd = ctx.Database.Connection.CreateCommand(); sql = "update appSchema.InformationRead SET [Read] = 1 WHERE TName LIKE 'DTEvaluation' and FK LIKE '" + issueId + "' AND UserId = " + userId; cmd.CommandText = sql; cmd.CommandType = System.Data.CommandType.Text; cmd.ExecuteNonQuery(); } } marked = true; } ctx.Database.Connection.Close(); ctx.Dispose(); return(marked); }
/// <summary> /// returns the count of unread infomation for user by issue /// </summary> /// <param name="issueId"></param> /// <param name="userId"></param> /// <returns></returns> public static int GetReadInfosCount(int issueId, int userId) { ApplicationDBEntities ctx = new ApplicationDBEntities(); string sql = "SELECT count(*) FROM InformationRead " + WhereClauseInfoCount(issueId, userId, ctx) + " AND [Read] = 1"; int cnt = ctx.Database.SqlQuery <int>(sql).FirstOrDefault(); ctx.Dispose(); return(cnt); }
/// <summary> /// updates a list of alternatives /// </summary> /// <param name="alternativeList"></param> /// <param name="useId">user who is performing this operation</param> public static void UpdateAlternatives(List <Alternative> alternativeList, int useId) { Alternative updateAlt; bool updated; ApplicationDBEntities ctx = new ApplicationDBEntities(); if (alternativeList == null || alternativeList.Count() == 0) { alternativeList = new List <Alternative>(); } foreach (Alternative alt in alternativeList) { updated = false; updateAlt = ctx.Alternative.Find(alt.Id); if (alt.Description != updateAlt.Description || !alt.Description.Equals(updateAlt.Description)) { updateAlt.Description = alt.Description; updated = true; } if (alt.Name != updateAlt.Name || !alt.Name.Equals(updateAlt.Name)) { updateAlt.Name = alt.Name; updated = true; } if (!(alt.Reason == null && updateAlt.Reason == null)) { if (alt.Reason != updateAlt.Reason || !alt.Reason.Equals(updateAlt.Reason)) { updateAlt.Reason = alt.Reason; updated = true; } } if (updated) { ctx.Entry(updateAlt).State = EntityState.Modified; ctx.SaveChanges(); HAlternative halt = new HAlternative(); halt.ChangeDate = DateTime.Now; halt.AlternativeId = updateAlt.Id; halt.UserId = useId; halt.Action = "alternative updated (" + updateAlt.Name + ")"; halt.Name = updateAlt.Name; halt.Description = updateAlt.Description; halt.Reason = updateAlt.Reason; halt.Rating = updateAlt.Rating; halt.IssueId = updateAlt.IssueId; ctx.HAlternative.Add(halt); ctx.Entry(halt).State = EntityState.Added; ctx.SaveChanges(); } } ctx.Dispose(); }