//create clone model of CharOrg so I don not skip a layer by using database models //directly in views and controllers public BCharOrg convertToBCharOrg(CharOrg charOrg) { return(new BCharOrg { Id = charOrg.Id, Address = charOrg.Address, Phone = charOrg.Phone }); }
public ActionResult AssoEdit(short infoId, short orgId, string submit, List <AssoNpc_Org> npcs, List <AssoEvent_Org> events, List <AssoChar_Org> charas ) { if (ModelState.IsValid) { #region Add Members List <short> currentNpcId = db.NpcOrgs.Where(x => x.OrgId == orgId).Select(x => x.NpcId).ToList(); if (npcs != null) { foreach (AssoNpc_Org member in npcs) { //if the association already exists if (currentNpcId.Contains(member.NpcId)) { NpcOrg toEdit = db.NpcOrgs.Where(x => x.NpcId == member.NpcId && x.OrgId == orgId).First(); //make the edits toEdit.OrgOrder = member.OrgOrder; toEdit.BlurbNpcPage = member.BlurbNpcPage; toEdit.BlurbOrgPage = member.BlurbOrgPage; toEdit.MemberOrder = member.MemberOrder; toEdit.IsCurrent = member.IsCurrent; db.Entry(toEdit).State = EntityState.Modified; db.SaveChanges(); currentNpcId.Remove(member.NpcId); } else { NpcOrg toAdd = new NpcOrg { OrgId = orgId, NpcId = member.NpcId, OrgOrder = member.OrgOrder, BlurbNpcPage = member.BlurbNpcPage, BlurbOrgPage = member.BlurbOrgPage, MemberOrder = member.MemberOrder, IsCurrent = member.IsCurrent }; db.NpcOrgs.Add(toAdd); } } } if (currentNpcId.Count != 0) { foreach (short id in currentNpcId) { NpcOrg gone = db.NpcOrgs.Where(x => x.OrgId == orgId && x.NpcId == id).FirstOrDefault(); db.NpcOrgs.Remove(gone); } } db.SaveChanges(); #endregion #region Add Events List <short> currentEventId = db.OrgEvents.Where(x => x.OrgId == orgId).Select(x => x.EventId).ToList(); if (events != null) { foreach (AssoEvent_Org assoEvent in events) { //if the association already exists if (currentEventId.Contains(assoEvent.EventId)) { OrgEvent toEdit = db.OrgEvents.Where(x => x.EventId == assoEvent.EventId && x.OrgId == orgId).First(); toEdit.Blurb = assoEvent.Blurb; db.Entry(toEdit).State = EntityState.Modified; db.SaveChanges(); currentEventId.Remove(assoEvent.EventId); } else { OrgEvent toAdd = new OrgEvent { OrgId = orgId, EventId = assoEvent.EventId, Blurb = assoEvent.Blurb }; db.OrgEvents.Add(toAdd); } } } if (currentEventId.Count != 0) { foreach (short id in currentEventId) { OrgEvent gone = db.OrgEvents.Where(x => x.OrgId == orgId && x.EventId == id).FirstOrDefault(); db.OrgEvents.Remove(gone); } } db.SaveChanges(); #endregion #region Add CharacterOrgs List <short> currentCharId = db.CharOrgs.Where(x => x.OrgId == orgId).Select(x => x.CharId).ToList(); if (charas != null) { foreach (AssoChar_Org assoChar in charas) { if (currentCharId.Contains(assoChar.CharId)) { CharOrg toEdit = db.CharOrgs.Where(x => x.CharId == assoChar.CharId && x.OrgId == orgId).First(); toEdit.BlurbOrgPage = assoChar.BlurbOrgPage; toEdit.IsCurrent = assoChar.IsCurrent; toEdit.IsPublic = assoChar.IsPublic; toEdit.KatherineApproved = assoChar.KatherineApproved; db.Entry(toEdit).State = EntityState.Modified; db.SaveChanges(); currentCharId.Remove(assoChar.CharId); } else { CharOrg toAdd = new CharOrg { OrgId = orgId, CharId = assoChar.CharId, BlurbOrgPage = assoChar.BlurbOrgPage, IsPublic = assoChar.IsPublic, IsCurrent = assoChar.IsCurrent, KatherineApproved = assoChar.KatherineApproved }; db.CharOrgs.Add(toAdd); } } } if (currentCharId.Count != 0) { foreach (short id in currentCharId) { CharOrg gone = db.CharOrgs.Where(x => x.OrgId == orgId && x.CharId == id).FirstOrDefault(); db.CharOrgs.Remove(gone); } } db.SaveChanges(); #endregion return(Json(true)); } //if model fails ViewBag.Npcs = db.NPCs.OrderBy(n => n.Name).ToList(); ViewBag.Events = db.Events.OrderBy(e => e.Name).ToList(); ViewBag.Characters = db.Characters.Where(i => i.IsApproved).OrderBy(c => c.CharacterName).ToList(); var org = db.Orgs.Find(orgId); AssoOrgVM model = new AssoOrgVM { InfoId = infoId, OrgId = orgId, Submit = submit, Name = org.Name, AssoNpcs = npcs, AssoEvents = events, AssoChars = charas }; return(View(model)); }