gpt4 book ai didi

entity-framework-6 - 在同步 asp.net 身份调用中的前一个异步操作完成错误之前,第二个操作在此上下文中启动

转载 作者:行者123 更新时间:2023-12-01 12:38:01 25 4
gpt4 key购买 nike

我得到了

"A second operation started on this context before a previous asynchronous operation completed"

在使用 asp.net identity 2.1 的 MVC 项目中间歇性地出错。基本上我有一个基本 Controller ,每个其他 Controller 都派生自该 Controller ,并且该 Controller 有一个返回 ApplicationUser 的属性。 (asp.net 身份用户的扩展类)。基本 Controller 具有以下内容。请注意,UserManager 是从 OwinContext 中检索的(是的,它是通过使用

CreatePerOwinContext()

方法,就像在模板中一样。

protected ApplicationUser ApplicationUser
{
get
{
var userId = User.Identity.GetUserId();
var applicationUser = UserManager.FindById(userId);
if (applicationUser == null)
{
return null;
}
return applicationUser;
}
}

protected ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
set
{
_userManager = value;
}
}

然后在我的其他 Controller 中,我随意调用这个属性来获取对ApplicationUser的引用,示例如下

public ActionResult Index()
{
if (Request.IsAuthenticated)
{
var model = new OrganizationListViewModel(false)
{
OrganizationDetailViewModels = ApplicationUser.Affiliations
.Select(e => new OrganizationDetailViewModel(
e.Organization, ApplicationUser)).ToList()
};
return View(model);
}
else
{
return RedirectToAction("Search", "Search", new { type = "organization" });
}
}

这有时有效,有时会出现我提到的错误。我没有在属性或 Controller 方法中调用异步操作。所以我很疑惑。有什么想法吗?

最佳答案

我怀疑这一行:

OrganizationDetailViewModels = ApplicationUser.Affiliations
.Select(e => new OrganizationDetailViewModel(
e.Organization, ApplicationUser)).ToList()

在这里,您请求 ApplicationUser,然后延迟加载 Affiliations,然后对于 Affiliations 中的每个选择,您请求 ApplicationUser 再次。

ApplicationUser 做本地缓存以避免在只需要一个的情况下对数据库的多个请求:

private ApplicationUser _cachedUser;
protected ApplicationUser ApplicationUser
{
get
{
var userId = User.Identity.GetUserId();

if (_cachedUser == null)
{
var applicationUser = UserManager.FindById(userId);
return applicationUser;
}
return _cachedUser;
}
}

关于entity-framework-6 - 在同步 asp.net 身份调用中的前一个异步操作完成错误之前,第二个操作在此上下文中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803300/

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