gpt4 book ai didi

c# - 使用 AspNet.Identity UserManager 时检测更改

转载 作者:行者123 更新时间:2023-11-30 17:28:48 26 4
gpt4 key购买 nike

我正在使用 AspNet.Identity用于我的 MVC 项目中的用户管理,因为我相信这是一个很好的开始,现在我已经开始工作(几乎没有变化),我想像我使用的其他 DbContext 一样添加审计跟踪(跟踪更改)。

IdentityModel.cs ,我有以下代码有效,但仅在某些情况下有效:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
//Can't recall if this was there by default
Configuration.AutoDetectChangesEnabled = true;
}

public override int SaveChanges()
{
//Tell EF to Track Changes
ChangeTracker.DetectChanges();

//More code once I get this working
//
}

}

在我的 Controller 中,我有以下内容:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditUserViewModel editUser)
{
var user = await UserManager.FindByIdAsync(editUser.Id);

//Update a property within the User object
user.FirstName = "Updated First Name";

//Save to database
var result = UserManager.Update(user);
//The above saves to database, but doesn't trigger SaveChanges()

//SaveChanges() will be triggered if I call
HttpContext.GetOwinContext().Get<ApplicationDbContext>().SaveChanges();

}

当上面HttpContext.GetOwinContext().Get<ApplicationDbContext>().SaveChanges();被调用,更新后的 ApplicationUser 有一个 EntityStateUnchanged .有道理,因为它已经保存了。

但是,我正在尝试了解如何利用 UserManager并且仍然使用 SaveChanges() .

我也明白我可以自己编写一个类来记录所有这些,但是当我扩展 ApplicationUser(或 ApplicationRole)时,我想避免为审计日志编写额外的代码。

任何建议或链接都​​会有所帮助!

最佳答案

在 UserStore 的构造函数中将 AutoSaveChanges 设置为 false(您将传递给 UserManager 的构造函数)。

public class MyUserStore : UserStore<User, Role, int, UserLogin, UserRole, UserClaim>
{
private MyDbContext _context;
public MyUserStore(MyDbContext context) : base(context)
{
//Set this to false
AutoSaveChanges = false;
_context = context;
}
}

现在您可以像往常一样调用保存更改,更改跟踪器将包含您期望的更改。

但是,当我尝试在对 SaveChanges 的调用之间对 UserManager 进行多次调用时,我确实遇到了 OptimisticConcurrencyException。我只是在每次 UserManager 操作后调用 SaveChanges。

关于c# - 使用 AspNet.Identity UserManager 时检测更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52104350/

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