Entity framework FirstOrDefaultAsync()挂起MVC5

Entity framework FirstOrDefaultAsync()挂起MVC5,entity-framework,async-await,Entity Framework,Async Await,有人请帮我不要杀死我的服务器。。以下是我的MVC控制器操作: (不用担心名字,我正在进行重构) JS Ajax调用: function populateContactList() { var leadId = $("#LeadId").val(); $.ajax({ url: url + "/Contact/AllByLead/", type: "GET", data: { 'leadId': leadId }, success: function(dat

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

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) {
    }
  });
}
如果你能在我的课程中给我加分数,那就太糟糕了。。现在要抢先一步真是太慢了。因此发生了异步更改。我想看看在有更多用户的系统上是否会更容易。(我可以自己分析/测试显式加载是否会更好,只是说…)

无论如何,我点击了这个按钮,当wait FirstOrDefaultAsync()被点击时,服务器完全瘫痪


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

嗯,您是否在控制器中返回了任何内容?那会把它挂起来

试一试

公共异步任务AllByLead(int-leadId)
{
var lead=Wait_researchService.GetLeadWithContacts(leadId);
返回Json(lead);
}

您能说明您的上下文是如何实例化/处理的吗?如果您同时从同一上下文异步运行多个查询,EF可能会不高兴。实际上,Autofac会为每个请求创建一个实例,但该请求将独立于其他生存期范围被激发,因为这是一个javascript ajax调用,编辑答案以显示代码。@Chazt3n:您的目标是.NET 4.5吗,您是否在
web.config
中将
targetFramework
设置为
4.5
?@StephenCleary,是的,先生,解决方案中的每个项目都是。@Chazt3n:如果是这样,请发布一个最小的、可复制的代码示例。对不起,是的,我返回的是部分视图。当我发布时,我没有意识到这是相关的,因为它并没有走那么远。(我明白这是绝对可能的)
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;
}
internal class DbContextModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(ctx => new CRTechEntities()).InstancePerLifetimeScope();
    }
}
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) {
    }
  });
}
public async Task<JsonResult> AllByLead(int leadId)
{
    var lead = await _researchService.GetLeadWithContacts(leadId);
    return Json(lead);
}