@@ -16,7 +16,7 @@ public EmitDataReaderDeserializer()
1616 {
1717 _dataRowParserFactory = new DataRowParserFactory ( ) ;
1818 }
19- public IEnumerable < T > ToEnumerable < T > ( RequestContext context , IDataReader dataReader )
19+ public IEnumerable < T > ToEnumerable < T > ( RequestContext context , IDataReader dataReader , bool isDispose = true )
2020 {
2121 try
2222 {
@@ -33,12 +33,20 @@ public IEnumerable<T> ToEnumerable<T>(RequestContext context, IDataReader dataRe
3333 }
3434 finally
3535 {
36- //while (dataReader.NextResult()) { }
37- dataReader . Close ( ) ;
36+ Dispose ( dataReader , isDispose ) ;
3837 }
3938 }
4039
41- public async Task < IEnumerable < T > > ToEnumerableAsync < T > ( RequestContext context , IDataReader dataReader )
40+ private void Dispose ( IDataReader dataReader , bool isDispose )
41+ {
42+ if ( isDispose )
43+ {
44+ dataReader . Dispose ( ) ;
45+ dataReader = null ;
46+ }
47+ }
48+
49+ public async Task < IEnumerable < T > > ToEnumerableAsync < T > ( RequestContext context , IDataReader dataReader , bool isDispose = true )
4250 {
4351 var dataReaderAsync = dataReader as DbDataReader ;
4452 try
@@ -59,12 +67,11 @@ public async Task<IEnumerable<T>> ToEnumerableAsync<T>(RequestContext context, I
5967 }
6068 finally
6169 {
62- //while (await dataReaderAsync.NextResultAsync()) { }
63- dataReader . Close ( ) ;
70+ Dispose ( dataReader , isDispose ) ;
6471 }
6572 }
6673
67- public T ToSingle < T > ( RequestContext context , IDataReader dataReader )
74+ public T ToSingle < T > ( RequestContext context , IDataReader dataReader , bool isDispose = true )
6875 {
6976 try
7077 {
@@ -79,12 +86,11 @@ public T ToSingle<T>(RequestContext context, IDataReader dataReader)
7986 }
8087 finally
8188 {
82- //while (dataReader.NextResult()) { }
83- dataReader . Close ( ) ;
89+ Dispose ( dataReader , isDispose ) ;
8490 }
8591 }
8692
87- public async Task < T > ToSingleAsync < T > ( RequestContext context , IDataReader dataReader )
93+ public async Task < T > ToSingleAsync < T > ( RequestContext context , IDataReader dataReader , bool isDispose = true )
8894 {
8995 var dataReaderAsync = dataReader as DbDataReader ;
9096 try
@@ -101,8 +107,7 @@ public async Task<T> ToSingleAsync<T>(RequestContext context, IDataReader dataRe
101107 }
102108 finally
103109 {
104- //while (await dataReaderAsync.NextResultAsync()) { }
105- dataReader . Close ( ) ;
110+ Dispose ( dataReader , isDispose ) ;
106111 }
107112 }
108113 }
0 commit comments