无法切换动态密钥空间

时间:2017-02-18 01:09:17

标签: c# cassandra cassandra-sharp

我正在使用" CassandraCSharpDriver"并且我不能在同一个应用程序中动态使用不同的键空间。班级"表"始终连接到我用来连接数据库的第一个键空间。以下是代码示例:

 class Program
    {
        static void Main(string[] args)
        {
            {

                IDseCluster cluster = DseCluster.Builder()
                               .AddContactPoint("myPoint")
                               .Build();

                IDseSession session3 = cluster.Connect("keyspace_1");
                Row row3 = session3.Execute("select * from user_by_id").First();
                Console.WriteLine("keyspace_1 without table " + row3.GetValue<string>("username"));
                //Result keyspace_1 without table  user_from_keyspace_1

                IDseSession session2 = cluster.Connect("keyspace_2");
                Row row2 = session2.Execute("select * from user_by_id").First();
                Console.WriteLine("keyspace_2 without table " + row2.GetValue<string>("username")); 
                //Result keyspace_2 without table  user_from_keyspace_2



            }
            {

                IDseCluster cluster = DseCluster.Builder()
                              .AddContactPoint("myPoint")
                              .Build();
                IDseSession session2 = cluster.Connect("keyspace_1");
                var table2 = new Table<UserByIdModel>(session2);
                var user2 = table2.Execute().ToList().First();
                Console.WriteLine("keyspace_1 using table " + user2.UserName);
                //Result keyspace_1 using table user_from_keyspace_1


                IDseSession session = cluster.Connect("keyspace_2");
                var table = new Table<UserByIdModel>(session);
                var user = table.Execute().ToList().First();
                Console.WriteLine("keyspace_2 using table " + user.UserName); 
                //Result keyspace_2 using table user_from_keyspace_1


            }
        }
    }

拜托,帮帮我=)

1 个答案:

答案 0 :(得分:1)

理想情况下,您应该为每个不同的表引入一个不同的类。 Linq component of the DataStax driver将使用创建Table<T>实例时定义的配置来确定它映射到的键空间/表。使用new Table<UserByIdModel>(ISession session)构造函数时,使用的映射配置是可重用的MappingConfiguration.Global实例。

也就是说,Linq组件支持使用the specific constructor在每个模型的不同键空间中映射多个表:

var config = MappingConfiguration.Global;
const string table = "user_by_id";
var table1 = new Table<UserByIdModel>(session1, config, table, "keyspace_1");
var table2 = new Table<UserByIdModel>(session2, config, table, "keyspace_2");