我正在尝试通过添加新的“非核心”属性来更新我现有的ApplicationUser,例如FirstName,LastName。我已经通过ApplicationUser: IdentityUser
扩展了这些属性,这总体上很好。
现在,我尝试做的是在我的控制器中创建一个新的ApplicationUser,然后将其传递给存储库以更新db中存在的用户,如:
public ActionResult Members_Update(MemberViewModel mvm){
ApplicationUser user = new ApplicationUser();
user.FirstName = mvm.FirstName;
user.LastName = mvm.LastName;
_repo.UpdateApplicationUser(user);
}
在存储库(构造为_context = new ApplicationDbContext();
)中,我执行:
public void UpdateAppicationUser(ApplicationUser updatedUser){
_context.Users.Attach(updatedUser);
var entry = _context.Entry(updatedUser);
...
然后我继续通过
entry.Property(x => x.AccessFailedCount).IsModified = false;
entry.Property(x => x.EmailConfirmed).IsModified = false;
entry.Property(x => x.LockoutEnabled).IsModified = false;
// same for rest of core identity properties
_context.SaveChanges();
}
我正在尝试基于this pattern执行此操作,因此db只被命中一次(并且整体看起来像是一种最佳方式),但似乎有一些Identity行为阻止了这一点。在Attach
之后,条目只是替换原始用户而不是修改(因此,例如UserName最终为空,这自然是必需的)。