В принципе, я хочу использовать «хороший» синтаксис Dapper для хранимой процедуры, без необходимости вручную использовать exec MySproc @p1, @p2, @p3, @p4
и т. Д., Но мне нужно иметь возможность передавать строго типизированный объект с различными наборами свойств и иметь этот объект для отображения параметров. Я знаю, что могу сделать это с анонимным объектом, но сценарий, о котором я думаю, будет чем-то вроде сложной формы поиска, в которой можно искать несколько полей, а в соответствующей хранимой процедуре может быть довольно много параметров (многие из них по умолчанию).Поддерживает ли Dapper строго типизированные объекты с помощью хранимой процедуры?
В идеале я хотел бы быть в состоянии сделать что-то вроде этого:
var cust = new Customer();
cust.FirstName = ...
cust.LastName = ...
// using .NET 3.5 so need to use ugly syntax :(
var result = connection.Query<Customer>("MySproc", cust, null, false, null, CommandType.StoredProcedure).Single();
однако, что не работает и выдает ошибку, потому что мой объект Клиент может иметь десяток или более свойств, и я В этом случае мы будем искать только два; Кажется, что Dapper просто проверяет каждое свойство и присваивает значение, предполагая, что в sproc есть соответствующий параметр, если этого не может быть.
я могу сделать что-то похожее на это, используя PetaPoco (проходят в строго типизированный объект или анонимный объект), но я искал что-то немного более отведенной чем PetaPoco есть.
Является ли то, что я хочу сделать в Dapper (или другой микро-ORM? Я не могу использовать NHibernate или супертяжелый ORM), или есть способ, которым я пропускаю одну и ту же функциональность, не имея необходимости писать exec с тем, что может быть дюжиной параметров?
Вот чего я боялся, так как использование анонимных объектов не позволяет мне строить объект динамически на основе входных данных. Однако идея вспомогательного метода интересна. –
@WayneM см. Мое редактирование ... –
Теперь это выглядит интересно. Мне придется поиграть с этим и посмотреть, как это работает. Большое спасибо, Сэм! –