private async Task Save()
        {
            foreach (var noteViewModel in this.Notes)
            {
                noteViewModel.Note.Description = noteViewModel.Description;
            }

            var removedIds = _token.Notes
                             .Where(note => note.Id != default && Notes.All(model => model.Note.Id != note.Id))
                             .Select(entity => entity.Id)
                             .ToList();
            var notesToRemove = _context.Set <NoteEntity>().Where(entity => removedIds.Contains(entity.Id));

            _context.Set <NoteEntity>().RemoveRange(notesToRemove);

            var added = this.Notes.Where(model => model.Note.Id == default).Select(model => model.Note);

            _context.Set <NoteEntity>().AddRange(added);

            var changed = this.Notes
                          .Where(model => model.Note.Id != default)
                          .Select(model => model.Note)
                          .ToDictionary(entity => entity.Id);
            var changedIds   = changed.Keys.ToList();
            var noteEntities = _context.Set <NoteEntity>().Where(entity => changedIds.Contains(entity.Id)).ToList();

            noteEntities.ForEach(entity => entity.Apply(changed[entity.Id]));
            await _context.SaveChangesAsync();

            _token.Deactivate();
        }