StackExchange.Redis 공급자를 사용하여 Redis &에서 트랜잭션을 사용하고 있습니다.'StackExchange.Redis.ITransaction'에 'StringSetAsync'에 대한 정의가 없습니다.
나는 트랜잭션을위한 StringSetAsync 작업의 큰 배치를 가지고있다.
그리고 StringSetAsync 사용 중 오류가있어 :
RuntimeBinderException이 잡힌
'StackExchange.Redis.ITransaction가'StringSetAsync '
스택 추적에 대한 정의가 포함되어 있지 않습니다
at CallSite.Target (Closure, CallSite, ITransaction, String, Object) 에서 Repository.RedisDatabaseContextBase.SetRecord (IBasicRedisEntity redisEntity, 부울 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 (key, value); // error –
나는 이것을 싫어하지만, 다음과 같은'CallSite'에 대한 언급은 ** 동적으로 ** 동적 인 것을 제안한다. - 어떤 경우에는 그렇다 : 몇몇 시나리오 (명시 적 구현, 예를 들어). 이런 일이 발생하는 코드의 예가 있습니까? 모든 변수의 유형 포함 (예 :'obj.StringSetAsync (...) '가있는 경우'obj'는 무엇입니까?) –