public StatusTransport<StudentViewModel> SaveStudent(StudentViewModel model) { var transport = new StatusTransport<StudentViewModel>(); var student = new Student(model); _context.Students.Attach(student, true); try { _context.SubmitChanges(); // Retrieve most recent version. _context.Refresh(RefreshMode.OverwriteCurrentValues, student); transport.ViewModel = new StudentViewModel(student) { ClientId = model.ClientId }; transport.SetSuccess(); // Update all connected clients. Comment this line out to test // normal conflict resolution. BroadcastStudent(transport); } catch (ChangeConflictException exConflict) { // Retrieve most recent version. _context.Refresh(RefreshMode.OverwriteCurrentValues, student); transport.ViewModel = new StudentViewModel(student); // Mark result as stale. transport.SetStale(exConflict); } return transport; }
private void BroadcastStudent(StatusTransport<StudentViewModel> transport) { var hub = _hubConn.CreateProxy(typeof(StudentHub).Name); _hubConn .Start() .ContinueWith(_ => hub.Invoke("BroadcastUpdatedStudent", transport)); }
public StatusTransport<StudentViewModel> GetStudentById(int id) { var transport = new StatusTransport<StudentViewModel>(); var student = _context.Students.Single(x => x.Id == id); transport.ViewModel = new StudentViewModel(student); transport.SetSuccess(); return transport; }
public void BroadcastUpdatedStudent(StatusTransport<StudentViewModel> transport) { Clients.updateStudent(transport); }