使用MVC Identity将用户ID插入多个表

问题描述 投票:0回答:2

我希望在注册成功后将用户ID插入多个表

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插入到Activity Table中的UserId

asp.net-mvc
2个回答
0
投票

你至少有两个选择

第一。如果您使用的是Code First,则可以与ApplicationUser类一起创建Your Activity类。看看这里https://go.microsoft.com/fwlink/?LinkID=317594

第二。您可以像在此处一样检索用户ID

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
投票

你实例化ApplicationDbContext context但你不使用它。然后你使用entities,但它来自哪里?只有这里显示的控制器代码,我猜你应该这样做:

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

最后,你传递RoleViewModel role,但你不使用它。也许你可以删除它?

© www.soinside.com 2019 - 2024. All rights reserved.