2016-12-08 7 views
0

Npgsqlを使用して、ASP.Net MVC5プロジェクトをPostgreSQLに移植しようとしています。コードのvar kpi = ks.FirstOrDefault();列で An operation is already in progress.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); 
} 

エラー:しかし、それは、このコードではエラーがあります。
修正方法?

答えて

2

あなたのライン

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

はすでに実行されています。 ToList()を追加してデータを引き戻すことができます。つまり、

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

ありがとうございました!それは私を助けた。 –

関連する問題