【发布时间】:2021-02-15 16:50:35
【问题描述】:
我有一个模型,在 Cassandra 和 C# 中有一堆属性,所以为了避免我不得不手动分配普通准备语句(或为我执行此操作的脚本)中的每个值,我开始使用 Mapper Component .但是,CQL dates 会自动映射到 LocalDates,它们会被序列化为具有 Date、Month 和 Year 属性的 JSON 对象,我需要一个普通字符串。
我查看了具有 Define 和 ConvertTypesUsing 方法的 MappingConfiguration.Global,但第一个似乎没有我想要的,我什至无法实现 TypeConverter 类它期望作为后者的参数,因为它具有我从未见过的语法(而且我什至不知道它是否能完成这项工作)。
所以我想知道,CassandraDrive 中是否有任何内置选项可以实现我想要的?
如果有人想看看我的自定义 TypeConverter,我认为这是可行的:
using System;
using Cassandra;
using Cassandra.Mapping.TypeConversion;
namespace Api.Helpers
{
public class LocalDateConverter : TypeConverter
{
protected override Func<TDatabase, TPoco> GetUserDefinedFromDbConverter<TDatabase, TPoco>()
{
Func<LocalDate, string> converter = date =>
String.Format("{0}-{1}-{2}", date.Year, date.Month, date.Year);
return converter;
}
protected override Func<TPoco, TDatabase> GetUserDefinedToDbConverter<TPoco, TDatabase>()
{
throw new NotImplementedException();
}
}
使用该方法声明语法,我不知道应该在哪里指明我希望转换器应用哪些类型。此代码因Can't convert 'System.Func<Cassandra.LocalDate, string>' into 'System.Func<TDatabase, TPoco>' 而失败。
另一个与 Cassandra 驱动程序无关的解决方案是自定义 Json 转换器,但我也在使用 OData,它使用 custom serializer。
【问题讨论】: