【问题标题】:FirstOrDefaultAsync() Hangs MVC5FirstOrDefaultAsync() 挂起 MVC5
【发布时间】:2015-09-06 10:38:44
【问题描述】:

请有人帮我不要杀死我的服务器。这是我的 MVC 控制器操作: (不用担心名称,我正在重构中)

 public async Task<ActionResult> AllByLead(int leadId)
    {
      try
      {
        var lead = await _researchService.GetLeadWithContacts(leadId);
        var contactViewModels = Mapper.Map<Lead, List<ContactViewModel>>(lead);

        contactViewModels.Each(contact => PopulateContactOptions(contact));

        var listViewModel = new ContactListViewModel {Results = contactViewModels};

        return PartialView(listViewModel);
      }
      catch
      {
        return Json(string.Format(Resources.BasicErrorMessageFormat, "Error retrieving Lead Contacts"),
          JsonRequestBehavior.AllowGet);
      }
    }

服务:

public async Task<Lead> GetLeadWithContacts(int leadId)
{
  return await _repository.GetLeadWithContacts(leadId).ConfigureAwait(false);
}

回购:

  public async Task<Lead> GetLeadWithContacts(int leadId)
{
  var leadEntity = await _context.Leads
    .Where(lead => lead.LeadID == leadId)
    //.Include(lead => lead.LeadContactMaps.Select(map => map.Contact.Addresses))
    //.Include(lead => lead.LeadContactMaps.Select(map => map.Contact.PhoneNumbers))
    //.Include(lead => lead.Organizations.Select(business => business.Addresses))
    //.Include(lead => lead.Organizations.Select(business => business.PhoneNumbers))
    .FirstOrDefaultAsync();

  return leadEntity;
}

编辑

DbContext 模块

internal class DbContextModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(ctx => new CRTechEntities()).InstancePerLifetimeScope();
    }
}

JS Ajax 调用:

function populateContactList() {
  var leadId = $("#LeadId").val();
  $.ajax({
    url: url + "/Contact/AllByLead/",
    type: "GET",
    data: { 'leadId': leadId },
    success: function(data) {
      $("#contactContainer").html(data);
    },
    error: function(data) {
    }
  });
}

如果你能在我的收录上教我加分,它们很可能很糟糕。现在抓住领先优势非常缓慢。因此异步更改。我想看看在有更多用户的系统上是否会更容易。 (我可以自己分析/测试显式加载是否会更好,只是说..)

无论如何,我点击了这个,当 await FirstOrDefaultAsync() 被点击时,服务器完全崩溃了。

编辑 2:我已经更新了控制器操作以准确地显示我在这里所做的事情。我只包含了最初被击中的代码。

【问题讨论】:

  • 你能展示你的上下文是如何实例化/处理的吗?如果您同时从同一个上下文异步运行多个查询,EF 可能会不高兴。
  • 一个实例实际上是由 Autofac 根据请求创建的,但是这个请求将独立于其他生命周期范围被触发,因为它是一个 javascript ajax 调用编辑答案以显示代码。
  • @Chazt3n:您的目标是 .NET 4.5,并在您的web.config 中将targetFramework 设置为4.5
  • @StephenCleary,是的,先生,解决方案中的每个项目都是。
  • @Chazt3n:在这种情况下,请发布一个最小的、可重现的代码示例。

标签: entity-framework async-await


【解决方案1】:

嗯,您是否在控制器中返回任何内容?这会导致它挂起。

试试

public async Task<JsonResult> AllByLead(int leadId)
{
    var lead = await _researchService.GetLeadWithContacts(leadId);
    return Json(lead);
}

【讨论】:

  • 抱歉,是的,我返回的是部分视图。当我发布时,我没有意识到这是相关的,因为它并没有那么远。 (我知道它绝对可以)
猜你喜欢
  • 2015-06-21
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2012-12-20
相关资源
最近更新 更多