我有一个基于旧数据库生成许多新用户的操作,传递了一个包含详细信息的项目,并用于执行此操作,此处名为"regitem"。 foreach 循环遍历每个正则项并创建一个用户:
var user = new ApplicationUser { UserName = regitem.Email.Trim(), Email = regitem.Email.Trim(), Fname = regitem.Fname.Trim(), Lname = regitem.Lname.Trim(), OrgID = OrgID, RegistrationDate = regitem.RegistrationDate ?? DateTime.Now, LastLoginDate = regitem.LastLoginDate, EmailConfirmed = true, PhoneNumber = regitem.PhoneNumber };
var result = UserManager.Create(user, regitem.Password);
随着时间的流逝,用户管理器变得越来越慢。 据我了解,这是因为上下文未被处理,更好的方法是为每个用户帐户创建实例化和处置。 在控制器中,用户管理器实例化如下:
private ApplicationUserManager _userManager;
public AddOldDataController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
我知道如何为每个用户创建处理用户管理器,但我不确定每次如何实例化。 我已经读到使用 语句每次都会自动处理上下文,但同样我不知道在这种情况下我应该如何实例化。
执行此操作并避免UserManager因重复操作而减慢速度的最佳方法是什么?
我发现我必须创建用户管理器的所有部分,然后处理它。 事实上,我不确定我是否需要再处理用户管理器,因为它每个周期都会被替换。 以下是为每个循环生成用户管理器对象的代码:
var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
ApplicationUserManager _userManager = new ApplicationUserManager(store);
var usermanager = _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = new ApplicationUser { UserName = regitem.Email.Trim(), Email = regitem.Email.Trim(), Fname = regitem.Fname.Trim(), Lname = regitem.Lname.Trim(), OrgID = OrgID, RegistrationDate = regitem.RegistrationDate ?? DateTime.Now, LastLoginDate = regitem.LastLoginDate, EmailConfirmed = true, PhoneNumber = regitem.PhoneNumber };
var result = usermanager.Create(user, regitem.Password);