Я использую транзакцию на Redis & с использованием поставщика StackExchange.Redis.'StackExchange.Redis.ITransaction' не содержит определения для 'StringSetAsync'
У меня есть большая партия операций StringSetAsync для транзакции.
И я получил сообщение об ошибке при использовании StringSetAsync:
RuntimeBinderException был пойман
'StackExchange.Redis.ITransaction' не содержит определения для '' StringSetAsync
StackTrace:
at CallSite.Target (Closure, CallSite, ITransaction, String, Object) в Repository.RedisDatabaseContextBase.SetRecord (IBasicRedisEntity redisEntity, Boolean isNewRecord)
====
Добавлено:
Вот пример кода, который отражает проблему. Марк был прав, это все о динамический.
try
{
ConnectionMultiplexer cm = ConnectionMultiplexer.Connect("localhost:6380,allowAdmin=true");
var db = cm.GetDatabase();
ITransaction transaction = db.CreateTransaction();
dynamic pp = new byte[5] {1, 2, 3, 4, 5};
transaction.StringSetAsync("test", pp);
if (transaction.Execute())
{
Console.Write("Committed");
}
else
{
Console.Write("UnCommitted");
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e);
}
RuntimeBinderException предполагает, что вы используете 'dynamic' - это правильно? –
Нет, я использую дженерики. Но в конце это все равно просто: transaction.StringSetAsync (ключ, значение); // error –
Ненавижу говорить об этом, но упоминание «CallSite» выглядит следующим образом: ** настоятельно предлагает ** 'dynamic' в игре здесь - в этом случае да: он будет терпеть неудачу для нескольких сценариев (явная реализация, например). У вас есть пример кода, где это происходит? Включая типы любых переменных (т. Е. Если у вас есть 'obj.StringSetAsync (...)', что такое 'obj'?) –