1- using System ;
2- using System . Collections . Generic ;
31using System . Data ;
4- using System . Data . SqlClient ;
5- using System . Linq ;
62using Dapper ;
7- using Microsoft . SqlServer . Server ;
83
94namespace Dibix . Dapper
105{
116 internal sealed class DapperStructuredTypeParameter : SqlMapper . ICustomQueryParameter
127 {
138 #region Fields
14- private readonly Func < IEnumerable < SqlDataRecord > > _recordsProvider ;
15- #endregion
16-
17- #region Properties
18- public string UdtName { get ; }
9+ private readonly StructuredType _udt ;
10+ private readonly SqlDataRecordAdapter _sqlDataRecordAdapter ;
1911 #endregion
2012
2113 #region Constructor
22- public DapperStructuredTypeParameter ( string udtName , Func < IEnumerable < SqlDataRecord > > recordsProvider )
14+ public DapperStructuredTypeParameter ( StructuredType udt , SqlDataRecordAdapter sqlDataRecordAdapter )
2315 {
24- this . UdtName = udtName ;
25- this . _recordsProvider = recordsProvider ;
16+ _udt = udt ;
17+ _sqlDataRecordAdapter = sqlDataRecordAdapter ;
2618 }
2719 #endregion
2820
2921 #region ICustomQueryParameter Members
3022 void SqlMapper . ICustomQueryParameter . AddParameter ( IDbCommand command , string name )
3123 {
3224 Guard . IsNotNull ( command , nameof ( command ) ) ;
33- command . Parameters . Add ( this . ToSqlParameter ( command , name ) ) ;
25+ command . Parameters . Add ( ToSqlParameter ( command , name ) ) ;
3426 }
3527 #endregion
3628
@@ -39,27 +31,10 @@ private IDbDataParameter ToSqlParameter(IDbCommand command, string parameterName
3931 {
4032 IDbDataParameter param = command . CreateParameter ( ) ;
4133 param . ParameterName = parameterName ;
42- param . Value = this . GetValue ( ) ;
43-
44- if ( param is SqlParameter sqlParam )
45- {
46- sqlParam . SqlDbType = SqlDbType . Structured ;
47- sqlParam . TypeName = this . UdtName ;
48- }
34+ _sqlDataRecordAdapter . MapStructuredTypeToParameter ( param , _udt ) ;
4935
5036 return param ;
5137 }
52-
53- private object GetValue ( )
54- {
55- ICollection < SqlDataRecord > records = this . GetRecords ( ) as ICollection < SqlDataRecord > ?? this . GetRecords ( ) . ToArray ( ) ;
56- return records . Any ( ) ? records : null ;
57- }
58-
59- private IEnumerable < SqlDataRecord > GetRecords ( )
60- {
61- return this . _recordsProvider ( ) ;
62- }
6338 #endregion
6439 }
6540}
0 commit comments