Entity framework FirstOrDefaultAsync()挂起MVC5
有人请帮我不要杀死我的服务器。。以下是我的MVC控制器操作: (不用担心名字,我正在进行重构) JS Ajax调用: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
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);
}