Cassandra C#驱动程序:Linq表在会话中更改键空间后查询从第一个键空间返回数据

时间:2018-02-09 14:23:29

标签: c# linq cassandra

我正在使用CassandraCSharpDriver 3.4.0.1

我的C#应用​​程序需要创建新的密钥空间,并能够在运行时切换它们。一切正常,除了直接表Linq Where查询,例如:

_table.Where(...).Execute(),

始终从第一个键空间返回数据,即使我使用新会话重新创建表对象(或在同一会话中使用ChangeKeyspace)。

使用ExecuteAsync(从表对象创建)在会话上执行insert语句工作正常,数据正确插入新的键空间。

var insert = _table.Insert(new Values()
                {
                    ...
                });

_session.ExecuteAsync(insert);

1 个答案:

答案 0 :(得分:0)

您应该定义one class per table in your mappings。如果在不同的键空间中有2个不同的表,则应使用2个不同的类。

此外,您应该避免在Session上的键空间之间切换以查询不同的表,您可以在映射定义中指定表的键空间:

MappingConfiguration.Global.Define(
   new Map<User>()
      .TableName("users")
      .KeyspaceName("ks1")
      // ...
)

MappingConfiguration.Global.Define(
   new Map<AnotherClass>()
      .TableName("table2")
      .KeyspaceName("ks2")
      // ...
)