У меня есть класс репозитория, который запрашивает EF DbContext следующим образом:
public IEnumerable<ProductFilterData> GetAllProducts()
{
return this.DataContext.Products.Select(x => new ProductFilterData { Id = x.Id, Name = x.Name, ProductDetailLevelCode = x.ProductDetailLevel.Code, Description = x.Description, ParentProductIds = x.ParentProducts.Select(p => p.Id) });
}
Который работает нормально. Тем не менее, когда я рефакторинг этот код для этого:
public IEnumerable<ProductFilterData> GetAllProducts()
{
return this.MapToProductFilterData(this.DataContext.Products);
}
private IEnumerable<ProductFilterData> MapToProductFilterData(IEnumerable<Product> products)
{
return products.Select(x => new ProductFilterData { Id = x.Id, Name = x.Name, ProductDetailLevelCode = x.ProductDetailLevel.Code, Description = x.Description, ParentProductIds = x.ParentProducts.Select(p => p.Id) });
}
Я получаю исключение:
Уже есть открытый DataReader, связанный с этой командой, который
должен быть закрыт первым.
Почему передача ссылки на DbSet методу вызывает изменение в поведении EF? Между прочим, если я изменяю тип параметра MapToProductFilterData на IQueryable, тогда он работает. Кроме того, если я удаляю сопоставления отношений, это также работает.