diff --git a/src/EFCore.Relational/Query/Internal/GroupBySplitQueryingEnumerable.cs b/src/EFCore.Relational/Query/Internal/GroupBySplitQueryingEnumerable.cs index 982b59dcdb6..7426428046c 100644 --- a/src/EFCore.Relational/Query/Internal/GroupBySplitQueryingEnumerable.cs +++ b/src/EFCore.Relational/Query/Internal/GroupBySplitQueryingEnumerable.cs @@ -360,6 +360,19 @@ public void Dispose() { _relationalQueryContext.Connection.ReturnCommand(_relationalCommand!); _dataReader.Dispose(); + + if (_resultCoordinator != null) + { + foreach (var dataReader in _resultCoordinator.DataReaders) + { + dataReader?.DataReader.Dispose(); + } + + _resultCoordinator.DataReaders.Clear(); + + _resultCoordinator = null; + } + _dataReader = null; _dbDataReader = null; } @@ -526,20 +539,30 @@ private static async Task InitializeReaderAsync(AsyncEnumerator enumerator return false; } - public ValueTask DisposeAsync() + public async ValueTask DisposeAsync() { - if (_dataReader is not null) + if (_dataReader != null) { _relationalQueryContext.Connection.ReturnCommand(_relationalCommand!); + await _dataReader.DisposeAsync().ConfigureAwait(false); + + if (_resultCoordinator != null) + { + foreach (var dataReader in _resultCoordinator.DataReaders) + { + if (dataReader != null) + { + await dataReader.DataReader.DisposeAsync().ConfigureAwait(false); + } + } + + _resultCoordinator.DataReaders.Clear(); + _resultCoordinator = null; + } - var dataReader = _dataReader; _dataReader = null; _dbDataReader = null; - - return dataReader.DisposeAsync(); } - - return default; } } } diff --git a/src/EFCore.Relational/Query/Internal/SplitQueryingEnumerable.cs b/src/EFCore.Relational/Query/Internal/SplitQueryingEnumerable.cs index 5a8e99b477c..8a52d5ea66f 100644 --- a/src/EFCore.Relational/Query/Internal/SplitQueryingEnumerable.cs +++ b/src/EFCore.Relational/Query/Internal/SplitQueryingEnumerable.cs @@ -281,6 +281,7 @@ public void Dispose() { _relationalQueryContext.Connection.ReturnCommand(_relationalCommand!); _dataReader.Dispose(); + if (_resultCoordinator != null) { foreach (var dataReader in _resultCoordinator.DataReaders) @@ -430,6 +431,7 @@ public async ValueTask DisposeAsync() { _relationalQueryContext.Connection.ReturnCommand(_relationalCommand!); await _dataReader.DisposeAsync().ConfigureAwait(false); + if (_resultCoordinator != null) { foreach (var dataReader in _resultCoordinator.DataReaders)