2012-04-30 3 views
0

Я оцениваю, используя Application Application Application Block 5.0 на работе, так как мы женаты на хранимых процедурах в обозримом будущем. Мне нравится простота и Mapper, которые включены в это, но то, что меня отключает, заключается в том, что не существует способа указать массив параметров или даже лучше какого-либо объекта «запрос по примеру», к вызову хранимой процедуры, который автоматически создаст параметры на основе ваших критериев. Представьте себе функцию поискового клиента, в которой вы можете указать одно или несколько свойств, которые нужно искать (предположим, что у нас есть хранимый процесс, уже созданный с полями с нулевым значением).Microsoft Enterprise Library 5.0 Доступ к данным - возможно ли реализовать функцию «запрос по примеру»?

То, что я хотел бы сделать что-то вроде этого:

var customerQuery = new { FirstName = "John", LastName = "Doe" } 
var result = db.ExecuteSprocAccessor("SearchCustomers", customerQuery); 

и есть анонимный объект превратился в различных SqlParameter объектов.

Возможно ли это как можно? Примеры, которые я видел на MSDN, похоже, просто показывают конкретные параметры вручную, без какой-либо идеи, какой параметр является.

ответ

0

Блок приложений для доступа к данным в корпоративной библиотеке поддерживает различные карты: выходы, преобразователи результатов и Parameter Mappers. В этом случае вам интересны параметры Mappers. Если вы используете SqlDatabase или OracleDatabase, поддерживается механизм сопоставления параметров по умолчанию. Картинка по умолчанию упрощена и основана на позиции параметров, но при необходимости вы можете создать свои собственные картографы.

Рассмотрим хранимую процедуру, которая принимает 2 ИНТ параметры, то фрагмент кода будет выглядеть следующим образом:

var logs = db.ExecuteSprocAccessor<Log>("usp_getLogs", 
       new object[] { 1, -1 } // parameters as array 
      ).ToList(); 

Вы можете создать несколько вспомогательных методов для создания соответствующего массива объектов.