Я использую транзакцию в Redis и использую провайдера StackExchange.Redis.
У меня есть большая партия операций StringSetAsync для транзакции.
И у меня есть ошибка при использовании StringSetAsync:
Исключение RuntimeBinderException было перехвачено
«StackExchange.Redis.ITransaction» не содержит определения для «StringSetAsync».
Трассировки стека:
в 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);
}
dynamic
— это правильно? - person Marc Gravell   schedule 21.01.2015CallSite
в таком виде: сильно предполагает, что здесь играет рольdynamic
— в этом случае да: в нескольких сценариях (например, явная реализация) это не сработает. У вас есть пример кода, где это происходит? Включая типы любых переменных (например, если у вас естьobj.StringSetAsync(...)
, что такоеobj
?) - person Marc Gravell   schedule 22.01.2015