private static void ToRow(User obj, UserRow row)
 {
     row.Id           = obj.Id.Value;
     row.Name         = obj.Name;
     row.Role         = ToDbRole(obj.Role);
     row.Email        = obj.Email;
     row.PasswordSalt = obj.PasswordSalt;
     row.PasswordHash = obj.PasswordHash;
 }
        private static User FromRow(UserRow row)
        {
            var role = FromDbRole(row.Role);

            return(new User(new UserId(row.Id),
                            row.Name,
                            role,
                            row.Email,
                            row.PasswordSalt,
                            row.PasswordHash
                            ));
        }
        public Task StoreAsync(User user, CancellationToken cancellationToken = default)
        {
            return(Task.Factory.StartNew(() =>
            {
                var dbSet = dbContext.Users;

                var row = dbSet.FirstOrDefault(x => x.Id == user.Id.Value);
                if (row != null)
                {
                    ToRow(user, row);
                    dbSet.Update(row);
                }
                else
                {
                    row = new UserRow();
                    ToRow(user, row);
                    dbSet.Add(row);
                }

                dbContext.SaveChanges();
            }, cancellationToken));
        }