У меня есть код, который при запуске исключает тип «EntityCommandExecutionException».Linq Call - есть уже открытый DataReader, связанный с этой командой, который должен быть закрыт первым
Линия, Визуальные точки Студийные к:
else if (item.FirstOrDefault().InspectionEquipmentTypes.Any())
внутренней детали, за исключением сказать, что:
There is already an open DataReader associated with this Command which must be closed first.
Мой вопрос линия, которая подняла ошибку, не пытается использовать database/datareader (насколько мне известно), поэтому я не уверен, почему генерируется это исключение.
Edit:
public static IEnumerable<IGrouping<string,Entities.Inspection>> GetUnscheduledBatchInspections(Entities.EntityModel context)
{
var results = context.Inspections.Where(w =>
w.InspectionBatchNo != null
&& w.IsCancelled == false
&& !w.CalendarItems.Any()
&& w.Duration.HasValue).GroupBy(g => g.InspectionBatchNo);
return results;
}
Вызов метода:
private void MapBatchInspectionsToViewModel(ref SchedulerViewModel viewModel)
{
var batchInspections = SchedulerManager.GetUnscheduledBatchInspections(this.Context);
foreach (var item in batchInspections)
{
var bigi = new BatchInspectionGridItem();
if (item.Any())
{
bigi.BatchInspectionNo = item.First().InspectionBatchNo;
if (item.FirstOrDefault().EquipmentTypeID != null)
{
bigi.EquipmentTypeName = item.FirstOrDefault().EquipmentType.Description;
}
else if (item.FirstOrDefault().InspectionEquipmentTypes.Any())
{
bigi.EquipmentTypeName = string.Join("/", item.FirstOrDefault().InspectionEquipmentTypes.Select(s => s.EquipmentType.Description));
}
bigi.CustomerName = item.First().CustomerSite.Customer.CustomerName;
bigi.CustomerID = item.First().CustomerSite.Customer.CustomerID;
bigi.NumberOfInspections = item.Count();
bigi.TotalDuration = item.Sum(s => s.Duration);
}
viewModel.BatchInspectionGridViewModel.Add(bigi);
}
}
Можете ли вы опубликовать еще один код, чтобы показать определение того, как создается «элемент»? –
Вы используете LINQ внутри условного выражения. Можно предположить, что предыдущие условные выражения имеют контекст, связанный с аналогичными проверками. –
Я предполагаю, что вы используете linq для sql или linq для сущности. В любом случае вы можете настроить соединение с dbase, чтобы разрешить несколько активных наборов результатов, которые позволяют вам одновременно использовать несколько DataReaders. Просто добавьте в строку подключения следующее: MultipleActiveResultSets = true; –