Я хочу вставить идентификатор пользователя в несколько таблиц после успешной регистрации

public async Task<ActionResult> Register(RegisterViewModel model , RoleViewModel role )
    {
        if (ModelState.IsValid)
        {
            ApplicationDbContext context = new ApplicationDbContext();
            var user = new ApplicationUser {
                UserName = model.UserName,};

            Activity activity = new Activity
            {
                RoleId = model.RoleName,
                UserId = model.Id,
            };
            entities.activities.Add(activity);
            entities.SaveChanges();

            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded )
            {
                result = await UserManager.AddToRolesAsync(user.Id, model.RoleName);

                await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                return RedirectToAction("Index", "Home");
            }

            AddErrors(result);
        }

Это AcountController, ничего не происходит, я хочу вставить Id из таблицы пользователей в UserId в таблице активности

0
Ms.Fatima 15 Апр 2019 в 18:02

2 ответа

Лучший ответ

У вас есть как минимум два варианта для этого

< Сильный > Во-первых . если вы используете Code First, вы можете создать класс Your Activity вместе с классом ApplicationUser. Посмотрите, как здесь https://go.microsoft.com/fwlink/?LinkID=317594

< Сильный > Второй . Вы можете получить идентификатор пользователя так, как вы это сделали здесь

result = await UserManager.AddToRolesAsync(user.Id, model.RoleName);
var currentId = user.Id;

Также ваша вкладка «Активность» должна появиться после того, как пользователь был создан, как показано ниже.

public async Task<ActionResult> Register(RegisterViewModel model, RoleViewModel role)
{
   if (ModelState.IsValid)
   {
       ApplicationDbContext entities = new ApplicationDbContext();
       var user = new ApplicationUser {UserName = model.UserName};            

       var result = await UserManager.CreateAsync(user, model.Password);
       if (result.Succeeded )
       {
           Activity activity = new Activity
           {
               RoleId = model.RoleName,
               UserId = user.Id,
           };
           entities.activities.Add(activity);
           entities.SaveChanges();
           result = await UserManager.AddToRolesAsync(user.Id, model.RoleName);

           await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

           return RedirectToAction("Index", "Home");
       }

       AddErrors(result);
   }
}
0
Bosco 7 Авг 2019 в 18:21

Вы создаете экземпляр ApplicationDbContext context, но не используете его. Затем вы используете entities, но откуда это? С только кодом контроллера, показанным здесь, я думаю, вы должны сделать:

context.activities.Add(activity);
context.SaveChanges();

Наконец, вы передаете RoleViewModel role, но не используете его. Может быть, вы можете удалить это?

0
Lasse Holm 15 Апр 2019 в 17:21