为了账号安全,请及时绑定邮箱和手机立即绑定

将日期时间保存到 Cassandra 日期列

将日期时间保存到 Cassandra 日期列

C#
MM们 2021-06-04 08:35:27
Cassandra .NET 驱动程序文档非常糟糕,我试图拼凑一些功能性的东西,但我浪费了太多时间尝试更改我发现的 Java 文档中的代码。我正在尝试使用 Cassandra 驱动程序将数据写入一个简单的表。该表已经存在并且里面有日期。我创建了一个映射并添加了一些列。这是一个截止版本来演示:For<Profile>().TableName("profiles")    .PartitionKey(p => p.IntegerId)    .Column(p => p.IntegerId, cm => cm.WithName("profileid"))    .Column(p => p.BirthDate, cm => cm.WithName("dateofbirth"))有更多的列和表,但这是重要的部分。然后保存是通过一个简单的通用方法完成的:public async Task<bool> Add<T>(T item) where T : EntityBase, new(){    await _mapper.InsertIfNotExistsAsync(item);}那里还有更多代码,但相关部分在这里。重要的是我正在使用 InsertIfNotExists 并使用适用于基本实体的通用方法。dateofbirthCassandra 中的列是日期类型。当我运行 Insert 方法时,我得到异常,Date 的长度应该是 4 个字节而不是 8 个(我假设我需要切断 DateTime 的时间部分)。我尝试在映射上使用 WithType 并创建一个类似于此问题中描述的 TypeSerializer ,但没有运气。任何人都有将这种类型(可能还有其他类型)保存到 Cassandra 的工作代码?这是从互联网改编的日期编解码器的代码,以及它是如何使用的,它可能(非常)错误:public class DateCodec : TypeSerializer<DateTime>{    private static TypeSerializer<LocalDate> _innerSerializer;    public DateCodec(TypeSerializer<LocalDate> serializer)    {        _innerSerializer = serializer;        TypeInfo = new CustomColumnInfo("LocalDate");    }    public override IColumnInfo TypeInfo { get; }    public override DateTime Deserialize(ushort protocolVersion, byte[] buffer, int offset, int length, IColumnInfo typeInfo)    {        var result = _innerSerializer.Deserialize(protocolVersion, buffer, offset, length, typeInfo);        return new DateTime(result.Year, result.Month, result.Day);    }    public override ColumnTypeCode CqlType { get; }    public override byte[] Serialize(ushort protocolVersion, DateTime value)    {        return _innerSerializer.Serialize(protocolVersion, new LocalDate(value.Year, value.Month, value.Day));    }}用法:TypeSerializerDefinitions definitions = new TypeSerializerDefinitions();definitions.Define(new DateCodec(TypeSerializer.PrimitiveLocalDateSerializer));var cluster = Cluster.Builder()    .AddContactPoints(...)    .WithCredentials(...)    .WithTypeSerializers(definitions)    .Build();
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 231 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信