c# - Dapper for Table Valued parameter in generic implementation -
c# - Dapper for Table Valued parameter in generic implementation -
following post using dapper.tvp tablevalueparameter other parameters have been able execute table valued parameter question regarding part of implementation. procedure seems working how can create implementation more generic? adding parameters in dynamicparameters 'new {}' specialized implementation according requirement. want able specify parameter name well.. example
public ienumerable<tcustomentity> sqlquery<tcustomentity>(string query, idictionary<string, object> parameters, commandtype commandtype) tcustomentity : class { datatable dt; dynamicparameters dp; var sqlconnection = _context.database.connection; seek { if (sqlconnection.state == connectionstate.closed) { sqlconnection.open(); } var dynamicparameters = new dynamicparameters(); if (parameters != null) foreach (var parameter in parameters) { if (parameter.value int) dynamicparameters.add(parameter.key, parameter.value, dbtype.int32); else if (parameter.value string) dynamicparameters.add(parameter.key, parameter.value.tostring(), dbtype.string); else if (parameter.value datetime) dynamicparameters.add(parameter.key, parameter.value, dbtype.datetime); else if (parameter.value decimal) dynamicparameters.add(parameter.key, parameter.value, dbtype.decimal); else if (parameter.value datatable) { dt = (datatable)parameter.value; dt.settypename(dt.tablename); var parametername = parameter.key; dp = new dynamicparameters(new { tvpname = dt }); // here want tvpname replaced parametername/parameter.key doesn't seem possible dynamicparameters.adddynamicparams(dp); } else dynamicparameters.add(parameter.key, parameter.value); } var test = sqlconnection.query<tcustomentity>(query, dynamicparameters, commandtype: commandtype); homecoming test; } { sqlconnection.close(); } } any advice how may proceed on issue making parameter name more generic? if not, specialized implementation each time utilize table value parameter
it isn't obvious me any of necessary, since:
dynamicparameters happy tvps direct elements, all of info types shown handled automatically dapper works happily dictionaries dapper opens , closed connection appropriately if isn't open when invoked it seems me interesting step here settypename, done:
foreach(object val in parameters.values) { if(val datatable) { var dt = (datatable)val; dt.settypename(dt.tablename); } } and pass original parameters object in:
return sqlconnection.query<tcustomentity>(query, parameters, commandtype: commandtype); that leaves just:
public ienumerable<tcustomentity> sqlquery<tcustomentity>(string query, idictionary<string, object> parameters, // suggestion: default null commandtype commandtype // suggestion: default commandtype.text ) tcustomentity : class { var sqlconnection = _context.database.connection; if (parameters != null) { foreach (object val in parameters.values) { if (val datatable) { var dt = (datatable)val; // suggestion: might want if dt.gettypename() null/"" dt.settypename(dt.tablename); } } } homecoming sqlconnection.query<tcustomentity>(query, parameters, commandtype: commandtype); } c# asp.net-mvc visual-studio dapper
Comments
Post a Comment