我可以在不硬编码的情况下为 SingleOrDefault<string>() 调用指定键空间吗?

Can I specify a keyspace for a SingleOrDefault<string>() call without hardcoding it?

我知道对于典型的 _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);

如果我在 table 名称之前对键空间名称进行硬编码,这两个都会给出所需的结果,但我想像您在第一个示例中所做的那样预先指定键空间。有什么办法吗?谢谢!

对于该用例,您是否需要映射器?如果你只想 运行 一个不涉及任何映射的查询,你可以只使用 session.ExecuteAsync(query).

无论如何,请尝试在构建器级别设置键空间,即在构建集群/会话对象时builder.WithDefaultKeyspace()

如果你使用多个键空间,恐怕你将不得不做类似 $"select json * from {keyspace}.tablename where varname=?" 的事情。使用这种方法,您将不会使用由 C* 验证的查询参数,因此请确保清理 keyspace 变量。