DataStax C# 驱动程序中的 ClusterKey 属性

ClusterKey Attribute in DataStax C# Driver

我一直在尝试使用 Cassandra 的 Datastax C# 驱动程序中的属性来使测试对象映射工作。 cassandra中有一个table定义为

CREATE TABLE test.omfieldtest (
    integer int,
    bigint varint,
    stringtext text, 
    universal uuid, 
    bool boolean, 
    singleprecision float,
    variableprecision decimal,
    PRIMARY KEY ((integer), bigint, stringtext, universal)
);

然后我有一个修饰的 C# class 映射到那个 table

[Table("test.omfieldtest")]
    public class MappingTest
    {
        [PartitionKey]
        public Int32 integer;
        [ClusteringKey(0, SortOrder.Ascending, Name = "bigint")]
        public Int64 bigint;
        [ClusteringKey(1, SortOrder.Ascending, Name = "stringtext")]
        public string stringVal;
        [ClusteringKey(2, SortOrder.Ascending, Name = "universal")]
        public Guid universal;
        [Column("bool")]
        public bool boolVal;
        [Column("singleprecision")]
        public Single singlePrecisionVal;
        [Column("variableprecision")]
        public decimal variablePrecisionVal;
    }

使用 mapper.Insert<MappingTest> 时,会抛出 InvalidQueryException 并出现 "Unknown identifier stringval" 问题。如果我更改 属性 的名称以匹配列名,一切正常,无论 ClusterKey 的名称 属性 设置为什么。

那么,为 ClusterKey 属性指定名称 属性 的目的是什么,甚至有什么作用?

您似乎遇到了 Mapper/Linq 组件中的驱动程序错误。我创建了一张票来跟踪它:CSHARP-507

幸运的是,有一个解决方法:包括 ColumnAttribute 和聚类键,在您的情况下是:

[Column("stringtext")]
[ClusteringKey]
public string stringVal;

我还在存储库中包含了一个失败的测试:https://github.com/datastax/csharp-driver/commit/9917bfff4ef569525a6df845f35d31d817e79dc0