2016-12-08 70 views
0

我尝试使用Npgsql将ASP.Net MVC5项目移植到PostgreSQL。但是,在这个代码中的错误:Npgsql + EF不关闭读取器

public ActionResult Index() 
{ 
    var roles = Roles.GetAll(); 

    foreach (var role in roles) 
    { 
     if (!RoleManager.RoleExists(role)) 
     { 
      var identityRole = new IdentityRole() { Name = role }; 
      var result = RoleManager.Create(identityRole); 
      // Check a creation result 
      if (!result.Succeeded) 
      { 
       Logger.Error(string.Format("Role '{0}' can't be created.", role)); 
      } 
     } 
    } 
    //Detect root administrators count 
    var rootRole = RoleManager.FindByName(Roles.Root); 
    ViewData["userCount"] = rootRole.Users.Count; 
    List<KpiViewModel> kpies; 
    //Build KPIs 
    using (var db = new DatabaseContext()) 
    { 
     var staffs = db.Staff.Where(s => s.TasksStaff.Count > 0); 
     kpies = new List<KpiViewModel>(staffs.Count()); 

     foreach (var s in staffs) 
     { 
      var item = new KpiViewModel(); 
      item.Id = s.Id; 
      item.Name = string.Format("{0} {1} {2}", s.LastName, s.FirstName, s.Patronymic); 
      var tasks = s.TasksStaff.Select(ts => ts.Task).Where(t => t.ClosedOn.HasValue); 

      float percent = 0f; 
      int total = tasks.Count(); 

      if (total > 0) 
      { 
       var closed = (float)tasks.Where(t => t.EndDate.Date.CompareTo(t.ClosedOn.Value.Date) >= 0).Count(); 
       percent = closed/total * 100; 
       item.Percent = percent; 
      } 

      var ks = db.Kpi.Where(k => k.Percent <= percent).OrderByDescending(k => k.Percent); 
      var kpi = ks.FirstOrDefault(); 
      var tint = 0xEEEEEE; //Default color RGB 238, 238, 238 

      if (kpi != null) 
      { 
       tint = kpi.Tint; 
      } 

      item.Tint = '#' + tint.ToString("X6"); 
      kpies.Add(item); 
     } 
    } 

    return View(kpies); 
} 

错误: An operation is already in progress.var kpi = ks.FirstOrDefault();串的码。
如何解决它?

回答

2

你行

var staffs = db.Staff.Where(s => s.TasksStaff.Count > 0); 

已在运行。您可以添加一个ToList()以使其回退数据,即

var staffs = db.Staff.Where(s => s.TasksStaff.Count > 0).ToList(); 
+0

谢谢!它帮助了我。 –

相关问题