2013-07-13 2 views
0

Что касается новой версии Microsoft Enterprise Libarary 6, они имеют метод, называемый ExecuteSprocAccessor (который должен возвращать Ienumerable<T> когда выполнение SP), который все его перегрузки являются: примерКорпоративная библиотека 6 ExecuteSprocAccessor overload?

enter image description here

Использование:

/*1*/ [Description("Return data as a sequence of objects using a stored procedure")] 
/*2*/   static void ReadDataAsObjects() 
/*3*/   { 
/*4*/    // Create an object array and populate it with the required parameter values 
/*5*/    object[] paramArray = new object[] { "%bike%" }; 
/*6*/    // Create and execute a sproc accessor that uses default parameter and outpu`t mappings 
/*7*/    IEnumerable<Product> productData = defaultDB.ExecuteSprocAccessor<Product>("GetProductList", paramArray); 
/*8*/    //... 
/*9*/    //... 
/*10*/   } 

Дополнительная информация:

Механизм добавления параметров (здесь) очень проблематичен, потому что нет ассоциации ParameterName to value.

все они есть (в строке 5)

object[] paramArray = new object[] { "%bike%" };

Так что я думаю, если у меня есть более 1 из параметров будет выглядеть следующим образом:

object[] paramArray = new object[] { "%bike%",19,"lala"... };

означает, что Мне нужно будет знать порядок ввода параметров пара sp!

NB

Другие методы имеют такого рода прикрепление значения имени:

defaultDB.AddInParameter(sprocCmd, "state", DbType.String, "New York");

Вопрос

Есть ли способ использования ExecuteSprocAccessor и до сих пор ParameterName to value ассоциации? (Предполагая, что я не знаю, порядок зр входа паров

ответ

1

Внутренне IParameterMapper используется, который является очень простым интерфейсом:

public interface IParameterMapper 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="command"></param> 
    /// <param name="parameterValues"></param> 
    void AssignParameters(DbCommand command, object[] parameterValues); 
} 

Это все основано на положениях, так что не так много, что можно сделать с отказом от кода коробки.

Один из вариантов, чтобы написать свой собственный Accessor, который использует пользовательский картограф параметр, который знает, как использовать имена параметров. Вы можете найти пример этого в потоке Entlib6 DAAB - Using accessors to execute stored procedures with optional parameters?.

+0

просто чудеса: они сделали 'ПараметрName to value' (AddInParameter), соответствующий другим методам. почему бы и не здесь? –

Смежные вопросы