Я знаю, что для типичного вызова _mapper.SingleOrDefault<SomeType>(new Cql("?", ex))
я могу создать сопоставление для SomeType и указать базу ключей. Прямо сейчас я хотел бы сделать:
var result = _mapper.SingleOrDefault<string>(new Cql("select json * from tablename where varname=?", arg));
или
var result = CassandraRetryHelper.SingleWithRemoteRetryAsync<string>(new Cql("select json * from tablename where varname=?", arg), _mapper);
Оба они дают желаемый результат, если я жестко запрограммирую имя пространства ключей перед именем таблицы, но вместо этого я хотел бы заранее указать пространство ключей, как вы можете сделать в первом примере. Есть ли способ сделать это? Спасибо!
Извините за путаницу, база ключей - это несвязанная переменная. @Генерал
Нужен ли вам картограф вообще для этого варианта использования? Если вы просто хотите выполнить запрос без какого-либо сопоставления, вы можете просто использовать session.ExecuteAsync(query)
.
В любом случае попробуйте установить пространство ключей на уровне компоновщика, т. е. builder.WithDefaultKeyspace()
при сборке объектов кластера/сеанса.
Если вы используете несколько пространств ключей, боюсь, вам придется сделать что-то вроде $"select json * from {keyspace}.tablename where varname=?"
. При таком подходе вы не будете использовать параметры запроса, которые проверяются C*, поэтому не забудьте очистить переменную keyspace
.
Определите «базу ключей» и «пространство ключей»