【发布时间】: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