public async Task <UpsertModel> UpsertParent(UpsertMode mode, ParentViewModel model) { var upsert = new UpsertModel(); try { Activity activity; string title; System.Text.StringBuilder builder; // Get Student //var student = db.Students.FirstOrDefault(x => x.StudentId == model.StudentId); // Apply changes Parent = model.ParseAsEntity(Parent); builder = new System.Text.StringBuilder(); if (model.ParentId == 0) { db.Parents.Add(Parent); title = "Parent Recorded"; builder.Append("A Parent record has been made : " + model.FirstName + " " + model.LastName).AppendLine(); } else { db.Entry(Parent).State = System.Data.Entity.EntityState.Modified; title = "Parent Updated"; builder.Append("The following changes have been made to the Parent details"); if (mode == UpsertMode.Admin) { builder.Append(" (by the Admin)"); } builder.Append(":").AppendLine(); } await db.SaveChangesAsync(); ParentId = Parent.ParentId; // update student parent relationship UpdateStudents(model.SelectedStudents); // Save activity now so we have a ParentId. Not ideal, but hey activity = CreateActivity(title, builder.ToString()); activity.UserId = ServiceUserId; await db.SaveChangesAsync(); if (model.ParentId == 0) { upsert.ErrorMsg = "Parent record created successfully"; } else { upsert.ErrorMsg = "Parent record updated successfully"; } upsert.RecordId = Parent.ParentId.ToString(); } catch (Exception ex) { upsert.ErrorMsg = ex.Message; //RecordException("Update Parent Error", ex); } return(upsert); }