Сразу оговорюсь, что работаю с Oracle'овским Data Provider'ом (10.1.0.4). Может с DP от MS таких проблем и не возникает.
Определяю абстакного reader'а (GetEntities)
public abstract class EntityAccessor : DataAccessor<Entity>
{
[SprocName("topology.get_entities")]
public abstract List<Entity> GetEntities();
}
или просто делаю вызов
List<Entity> entities = db.SetSpCommand("topology.get_entities").ExecuteList<Entity>();
где get_entities определена либо как функция без параметров возвращающая REF CURSOR
function get_entities return refcursor;
либо как процедура с OUT параметром типа REF CURSOR.
procedure get_entities(p_entities out refcursor);
ExecuteReader у ODP будет фалить, так как ему необходимо что б в команде было указано, либо Return параметер типа RefCursor (в первом случае), либо Output параметр RefCursor (во втором). В текущей реализации BLT, в случае если parameterValue метода DbManager.SetSpCommand путой, CreateSpParameters не вызывается и команда выполняется с пустым списком параметров.
Форсировал вызов CreateSpParameters (с небольшими изменениями в ней), ExecuteReader'ы стали выполняться.