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

本文关键字:ClusterKey 属性 驱动程序 DataStax | 更新日期: 2023-09-27 18:08:23

我一直在尝试使用Cassandra的Datastax c#驱动程序中的属性获得一个测试对象映射工作。cassandra中有一个由

定义的表
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#类映射到那个表

[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,并伴有"未知标识符字符串"的问题。如果我更改属性的名称以匹配列名,那么无论ClusterKey的name属性设置为什么,一切都可以正常工作。

那么为ClusterKey属性指定Name属性的目的或效果是什么呢?

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

看起来你在Mapper/Linq组件中遇到了一个驱动程序错误。我已经创建了一个ticket来跟踪它:CSHARP-507

幸运的是,有一个解决方案:包括ColumnAttribute和集群键,在您的情况下将是:
[Column("stringtext")]
[ClusteringKey]
public string stringVal;

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