c# - 使用 Datastax C# Driver 3.6 查询 cassandra 时使用 Enum
问题描述
我目前正在尝试使用 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 序列化程序并将其添加到驱动程序的序列化程序列表中来解决,但是,我正在寻找一个不修改驱动程序本身的解决方案。
解决方案
我相信这是在https://datastax-oss.atlassian.net/browse/CSHARP-938中捕获的相同问题
int
用户报告说,在驱动程序的 LINQ 组件支持此问题之前,将值显式转换为查询表达式是解决此问题的方法。