Я пытаюсь использовать Dapper для вызова хранимой процедуры, которая имеет пару параметров вывода, используя VB.NET (и .NET 4.0).Добавление динамического выходного параметра Dapper в VB.NET
Тем не менее, кажется, что я не могу использовать метод DynamicParameters.Add
, потому что я получаю следующее сообщение об ошибке компилятора:
'Add' is ambiguous because multiple kinds of members with this name exist in class 'Dapper.DynamicParameters'.
... когда я пытаюсь написать следующую строку:
p.Add("@NewRecordID", DbType:=DbType.Int32, direction:=ParameterDirection.Output)
Быстрый поиск говорит мне, что это иногда случается при использовании библиотеки C#, которая имеет несколько методов, которые различаются только в случае имени (VB.NET не зависит от регистра). Поиск исходного кода Dapper для DynamicParameters
показывает следующие две перегрузки для метода Add
, но оба они используют один и тот же случай, и компилятор должен уметь различать эти два.
public void Add(string name, object value, DbType? dbType, ParameterDirection? direction, int? size)
public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null, byte? precision = null, byte? scale = null)
(я также пытался добавить scale:=Nothing
на вызов, чтобы заставить вторую перегрузку, но безрезультатно.)
В то время как я могу обойти эту проблему с входными параметрами, передавая анонимный объект в конструктор DynamicParameters
, я не могу найти способ обойти это при добавлении выходных параметров.
Я проверил ссылки на проект, чтобы убедиться, что не существует множественных или неоднозначных ссылок на сборку.
Неужели кто-нибудь столкнулся с этой проблемой раньше и нашел обходное решение?
В настоящий момент единственным вариантом, о котором я могу думать, является повторная запись вызова хранимой процедуры без использования Dapper, as implied here.
Я подозреваю, что неоднозначность включает дополнительные параметры ВДобавления методов, которые означают, что единственное решение было бы изменить подпись щеголеватых методов. – MCattle
Ой, это противно. К сожалению, двойная перегрузка выше типична для добавления необязательных параметров в v2 api, заставляя старый вызов иметь все необязательные параметры. –
Можете ли вы попробовать 'p.Add (« @ NewRecordID », Nothing, DbType.Int32, ParameterDirection.Output, Nothing)'? –