Я использую Dapper's DynamicParamters объект с аргументом шаблона для генерации аргументов с моими сущностями. После того, как я позвоню в свою хранимую процедуру, я получаю следующую ошибку: «Процедура или функция sp_MemberSave содержит слишком много аргументов». У меня есть дополнительные свойства для некоторых моих объектов для бизнес-логики и т. Д. Есть ли способ убедиться, что dapper передает только параметры, являющиеся фактическими параметрами хранимой процедуры? Похоже, что Dapper сначала прочитал хранимую процедуру, а затем установил параметры, таким образом, он будет использовать только те, которые являются правильными. Как я могу ограничить параметры с помощью возможностей шаблона?Dapper «Процедура или функция sp_XXXX содержит слишком много аргументов».
ответ
Попробуйте создать анонимный тип соответствующих параметров из вашего объекта ... Если ваш класс имеет A, B, C, и D, и вам нужно только А и Б:
DynamicParameters(new { A = entity.A, B = entity.B });
Я надеялся, что мне не нужно было так поступать, так как есть много параметров. Много. – user1790300
Я понимаю. Мы написали обертку для Dapper в моей компании, у которой есть некоторые опрятные функции ... один из которых добавляет атрибут [NotParameter], который позволяет оболочке игнорировать свойства/поля. – Haney
Я просматривал их код, чтобы найти место для фильтрации параметров по мере их добавления, но раздел, который выполняет добавление, казался немного трудным для выполнения :-). – user1790300
Могу ли я быть Очень ясно, сценарий здесь? если вы просто передаете объект (а не DynamicParameters
), он делает сделать этот анализ; то есть conn.Execute("some sql", someEntity);
- после этого будут добавлены только члены someEntity
, которые он может видеть, которые используются в SQL. Там могут быть некоторые ложных срабатываний, так как она не выполняет полный лексический анализ SQL, поэтому параметр в комментариях, а именно:
-- removed by Fred: where row.Date < @StartDate
по-прежнему будет включен (так в приведенном выше примере, член StartDate
бы иметь право, хотя это, вероятно, не фактически необходимо).
Однако; DynamicParameters
в настоящее время доверяет пользовательской реализации. Я полагаю, что может переместить проверку анализа параметров после этой точки, но я бы предпочел сначала понять весь сценарий.
«... он делает этот анализ» - делает ли он анализ хранимых процедур (что и использует OP)? – Joe
@Joe, если командный тип говорит хранимую процедуру, то нет: это не так.Тем не менее, также можно использовать хранимые процедуры через текстовый командный тип (через 'exec') - я вижу это довольно часто - отсюда желание увидеть очень ясный пример. Но одно можно сказать наверняка: dapper никогда не попытается «сначала прочитать хранимую процедуру» –
спасибо за разъяснение. – Joe
- 1. Процедура или функция !!! слишком много аргументов указано
- 2. Процедура или функция Вставка содержит слишком много аргументов
- 3. Процедура или функция XXX содержит слишком много аргументов
- 4. Процедура или функция AppendDataCT содержит слишком много аргументов
- 5. Процедура или функция 'p_xxx' содержит слишком много аргументов
- 6. SQLDataSource = "Процедура или функция [Имя] содержит слишком много аргументов."
- 7. Процедура или функция Top100 содержит слишком много аргументов
- 8. Процедура или функция имеет слишком много аргументов
- 9. хранимая процедура содержит слишком много аргументов
- 10. Щеголеватые: Процедура или функция имеет слишком много аргументов указаны
- 11. Процедура или функция sp_select_companydetails имеет слишком много аргументов, указанных
- 12. GridView - процедура или функция имеет слишком много аргументов указаны
- 13. Процедура или функция deleteprofile имеет слишком много аргументов указано
- 14. процедура или функция *** имеет слишком много аргументов указаны
- 15. VB.NET процедура или функция имеет слишком много аргументов указаны
- 16. Процедура или функция sp_ap_Announcement_delete имеет слишком много аргументов указан
- 17. Процедура или функция spAddStudent имеет слишком много аргументов
- 18. Процедура или функция указала слишком много аргументов WinForm C#
- 19. Процедура или функция должна много аргументов указаны
- 20. foreach loop does loop, а затем get error Процедура или функция spTestSp содержит слишком много аргументов
- 21. Невозможно обновить таблицу из сетки (процедура или функция spExcelGridTestUpdateTable содержит слишком много аргументов)
- 22. Слишком много аргументов
- 23. Ошибка CODE: процедура имеет слишком много аргументов
- 24. Go: Функция Variadic и слишком много аргументов?
- 25. OCaml функция применяется слишком много аргументов
- 26. слишком много аргументов - функция с аргументом int
- 27. функция принимает слишком много аргументов F #
- 28. параметризованные хранимая процедура возвращение «слишком много аргументов указаны»
- 29. Asp.Net Время выполнения формы Windows Ошибка - «Процедура или функция Вставка задано слишком много аргументов».
- 30. Функция или процедура имеют слишком много аргументов, указанных при использовании SqlDataSource's UpdateCommand
Вы передаете свой объект (экземпляр вашего класса) в качестве параметра хранимой процедуры? –
Я вызываю DynamicParameters (entity), где entity является одним из моих объектов. Мои мысли состояли в том, что это создало бы коллекцию Parameters, читая объект и генерируя коллекцию Parameters. Я также думал, что он игнорирует любые параметры, которые не являются фактическими сохраненными параметрами prcoedure. Это так? – user1790300