Identity Framework Добавить пользователя и использовать в том же методе

У меня есть вызов, который создаст нового пользователя, если он введет пароль при покупке продукта. Если они создают учетную запись, я должен обновить данные, чтобы они были отражены для этого пользователя. Но проблема, с которой я сталкиваюсь, заключается в том, что я не могу использовать этого пользователя в одном и том же вызове и не смог выяснить, как обновить Identity Framework, чтобы иметь возможность распознавать вновь созданного пользователя. Если обновить страницу и попробовать снова, то работает, но в первый раз выдает ошибку... потому что пользователя нет.

Он сохраняет данные в таблице AspNetUsers. Объект newUser имеет назначенного пользователя. Но я тоже не могу использовать этот объект. Я попытался вытащить объект newUser и назначить объект newUser, но затем он пытается создать нового пользователя с тем же идентификатором, и я получаю ошибки внешнего ключа. Я не уверен, как это сделать, чтобы я мог использовать вновь созданного пользователя в том же вызове.

public async Task<IActionResult> CheckoutStep2(CheckoutStep2ViewModel model)

  if (model.Password != null && model.PasswordConfirm != null)
  {
    ApplicationUser newUser = new ApplicationUser { UserName = model.PaymentInformation.BillingEmail, Email = model.PaymentInformation.BillingEmail };
    var result = await userManager.CreateAsync(newUser, model.Password);
    if (result.Succeeded)
    {
      await signInManager.SignInAsync(newUser, isPersistent: false);
    }
  }

  // THIS CALL NEVER RETRIEVES THE NEWLY CREATED USER
  ApplicationUser user = 
  this.commonDataAccess.GetCurrentUser(User.Identity.Name);

  // IRREVERENT DATA REMOVED

}

Получить текущего пользователя

public ApplicationUser GetCurrentUser(string userName)
{
  return context.Users.FirstOrDefault(x => x.UserName == userName);
}

person Brandon Turpy    schedule 13.06.2017    source источник
comment
Какие данные вы пытаетесь получить для пользователя, которых у вас еще нет в объекте ApplicationUser?   -  person Muqeet Khan    schedule 13.06.2017
comment
Все данные были там ... но когда я назначал пользователя на новый объект, он отслеживал его как новое добавление и пытался добавить его снова, и я получал ошибки внешнего ключа. Поэтому мне пришлось вернуться и снова получить ApplicationUser из базы данных, чтобы Entity правильно отслеживала его.   -  person Brandon Turpy    schedule 14.06.2017


Ответы (1)


Мне не удалось заставить User.Identity.Name распознать вошедшего в систему пользователя. Поэтому вместо этого я создал новый вызов, чтобы получить пользователя по идентификатору, и просто передал вновь созданный идентификатор в вызов, чтобы получить пользователя из базы данных, которая отслеживается в графике сущностей (проблемы с внешним ключом).

Рабочий вызов

public async Task<IActionResult> CheckoutStep2(CheckoutStep2ViewModel model) {

  ApplicationUser user = null;
  if (model.Password != null && model.PasswordConfirm != null)
  {
    user = new ApplicationUser { UserName = model.PaymentInformation.BillingEmail, Email = model.PaymentInformation.BillingEmail };
    var result = await userManager.CreateAsync(newUser, model.Password);
    if (result.Succeeded)
    {
      await signInManager.SignInAsync(newUser, isPersistent: false);
    }
  }

  // THIS CALL NEVER RETRIEVES THE NEWLY CREATED USER
  user = this.commonDataAccess.GetUserById(user.Id);


  ....IRREVERENT DATA REMOVED    
}
person Brandon Turpy    schedule 13.06.2017