我正在使用" 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
}
}
}
拜托,帮帮我=)
答案 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");