【问题标题】:Using Enum when querying cassandra with Datastax C# Driver 3.6使用 Datastax C# Driver 3.6 查询 cassandra 时使用 Enum
【发布时间】:2021-11-21 11:55:17
【问题描述】:

我目前正在尝试使用 C# Datastax cassandra 驱动程序 (3.6) 将一些 MongoDB 切换到 Cassandra,使用 LINQ 表达式使用表对象映射构建查询:

For<SomeClass>()
 .TableName(path)
...
 .Column(x => x.DataProvider, x => x.WithName("dp").WithDbType<Int32>().WithSecondaryIndex())
...

问题是 - 一些字段是枚举(映射到 Int32) - 虽然我设法使用自定义 TypeConverter 将它们写入数据库,但由于驱动程序的序列化程序,我在将它们用作查询参数时遇到了问题。

var mapping = new CassandraDBMapping(path);
var table = new Table<T>(session, new MappingConfiguration()
                .ConvertTypesUsing(new CassandraTypeConverter())
                .Define(mapping));
return table.Where(predicate).AllowFiltering().ExecuteAsync();

这可以通过创建一个 Enum 序列化程序并将其添加到驱动程序的序列化程序列表中来解决,但是,我正在寻找一种无需修改驱动程序本身的解决方案。

【问题讨论】:

    标签: c# linq cassandra datastax


    【解决方案1】:

    我相信这与https://datastax-oss.atlassian.net/browse/CSHARP-938 中捕获的问题相同

    用户报告说,在驱动程序的 LINQ 组件支持之前,将查询表达式中的值显式转换为 int 是解决此问题的方法。

    【讨论】:

    • 解决方法对我有用,在创建表达式之前将枚举静态转换为 int:int dataProviderInt = (int)dataProvider; expression = rt =&gt; (int)rt.DataProvider == dataProviderInt;
    猜你喜欢
    • 2016-07-31
    • 2016-12-11
    • 2013-11-09
    • 2018-04-18
    • 2018-03-28
    • 2017-04-02
    • 2020-07-14
    • 1970-01-01
    • 2014-08-01
    相关资源
    最近更新 更多