How to create transaction with asp.net identity?

前端 未结 3 803
無奈伤痛
無奈伤痛 2020-12-31 11:28

I am doing registration on which i am asking for 5 things:

FullName,EmailId,Password,ContactNumber,Gender

Now emailid and password i am stor

3条回答
  •  醉梦人生
    2020-12-31 11:40

    You should not create a new db context, but use the existing one.

    var context = Request.GetOwinContext().Get()
    

    It is created per request if you use default implementation.

    app.CreatePerOwinContext(ApplicationDbContext.Create);
    

    Update:

    OK, since you are using two different contexts your code will look something like this:

    public async Task Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    
            var appDbContext = HttpContext.GetOwinContext().Get();
            using( var context = new MyEntities())
            using (var transaction = appDbContext.Database.BeginTransaction())
            {
                try
                {
                    var DataModel = new UserMaster();
                    DataModel.Gender = model.Gender.ToString();
                    DataModel.Name = string.Empty;
    
                    // Doing entry in AspnetUser even if transaction fails
                    var result = await UserManager.CreateAsync(user, model.Password);
                    if (result.Succeeded)
                    {
                        await this.UserManager.AddToRoleAsync(user.Id, model.Role.ToString());
                        this.AddUser(DataModel, context);
                        transaction.Commit();
                        return View("DisplayEmail");
                    }
                    AddErrors(result);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    return null;
                }
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    
    public int AddUser(UserMaster _addUser, MyEntities _context)
    {
        _context.UserMaster.Add(_addUser);
        _context.SaveChanges();
        return 0;
    }
    

    Here, appDbContext is the same context that is used by UserManager.

提交回复
热议问题