如何使用C#Datastax驱动程序删除Cassandra上的表?

时间:2017-05-11 12:28:00

标签: c# cassandra datastax

var keyspace = "mydb";
var datacentersReplicationFactors = new Dictionary<string, int>(0);
var replication = ReplicationStrategies.CreateNetworkTopologyStrategyReplicationProperty(datacentersReplicationFactors);

using (var cluster = Cluster.Builder().AddContactPoints("my_ip").Build())
using (var session = cluster.Connect())
{
    session.CreateKeyspaceIfNotExists(keyspace, replication, true);
    session.ChangeKeyspace(keyspace);

    var entityTable = new Table<Models.Entity>(session);
    var attributeTable = new Table<Models.Attribute>(session);

    entityTable.CreateIfNotExists(); // Worked
    attributeTable.CreateIfNotExists(); // Worked

    entityTable.Delete(); // Does nothing
    attributeTable.Delete();  // Does nothing
}

编辑:不使用原始查询session.Execute("DROP TABLE entities;");正常工作。

2 个答案:

答案 0 :(得分:4)

Delete()方法不适用于删除表。它返回DELETE cql语句的表示形式。如果你打电话,你就得到{DELETE FROM entities}

如果需要删除表,最简单的方法就是执行DROP语句:

session.Execute("DROP TABLE entities;");

答案 1 :(得分:2)

除非已经有一种我不知道的删除表的方法,否则你可以使用这些扩展名。

THENEEDED THESECONDSTAR LENGTHOFTHENEEDEDSTRING
--------- ------------- -----------------------
0112305V7            15                       9

然后你可以像这样使用它

public static class DastaxTableExtensions
{
    public static void Drop<T>(this Table<T> table)
    {
        table.GetSession().Execute($"DROP TABLE {table.Name};");
    }

    public static void DropIfExists<T>(this Table<T> table)
    {
        table.GetSession().Execute($"DROP TABLE IF EXISTS {table.Name};");
    }
}