Делегат для make
(материализация) довольно универсален и гибок, но в подавляющем большинстве случаев ИМО выполняет небольшую ненужную работу.С точки зрения того, что он делает - они используют делегата в качестве обратного вызова, чтобы заставить вызывающего абонента указать, как читать запись.
Примечание, поскольку они не ожидают, что потребитель изменить запись, вероятно, они должны показывать IDataRecord
, а не IDataReader
(любой читатель также реализует запись).
Обратите внимание, что если в потоке TDS есть какие-либо сообщения об ошибках после первой записи показанный подход не увидит их - но это крайний случай.Если вы хотите смягчить это, вы можете прочитать до конца потока TDS:
while(reader.NextResult()) {}
Лично я бы просто использовал здесь dapper-dot-net - избегая необходимости писатьвведите код вручную:
var cust = connection.Query<Customer>("MyStoredProcedure",
new { CustomerId = customerId },
commandType: CommandType.StoredProcedure).Single();
при этом MyStoredProcedure
выполняется как sproc, передавая @CustomerId
со значением из customerId
, затем применяет прямой столбец <===> соответствие свойства / полядля создания Customer
записей, затем утверждает, что есть ровно один результат - и возвращает его.