gpt4 book ai didi

asp.net-identity 事务问题

转载 作者:行者123 更新时间:2023-12-04 20:40:29 25 4
gpt4 key购买 nike

我想在同一个事务中创建一个具有角色的用户,但我在实现上有问题。为了在事务中使用 userStore 并且让它不自动保存更改并忽略我的事务,我不得不关闭 AutoSaveChanges。这使得它会等到我调用保存更改。这工作正常,但是因为当我调用 manager.Create 时用户存储现在不返回 userId,因为它关闭了我没有传递给 userManager.AddToRole 的 Id。有什么方法可以将我尝试创建的用户添加到同一事务中的角色?

最佳答案

如果您手动启动您的事务,然后提交它,那么在您的事务中写入 DB 的所有内容都将保存在您的事务中。如果你愿意,你可以回滚它。

做这样的事情:

var dbContext = // get instance of your ApplicationDbContext
var userManager = // get instance of your ApplicationUserManager
using (var transaction = dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted))
{
try
{
var user = // crate your ApplicationUser
var userCreateResult = await userManger.CreateAsync(user, password);
if(!userCreateResult.Succeeded)
{
// list of errors in userCreateResult.Errors
transaction.Rollback();
return userCreateResult.Errors;
}
// new Guid for user now saved to user.Id property
var userId = user.Id;

var addToRoleresult = await userManager.AddToRoleAsync(user.Id, "My Role Name");
if(!addToRoleresult.Succeeded)
{
// deal with errors
transaction.Rollback();
return addToRoleresult.Errors;
}

// if we got here, everything worked fine, commit transaction
transaction.Commit();
}
catch (Exception exception)
{
transaction.Rollback();
// log your exception
throw;
}
}

希望这可以帮助。

关于asp.net-identity 事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com