【问题标题】:How do you update timestamp field in cassandra with C# driver?如何使用 C# 驱动程序更新 cassandra 中的时间戳字段?
【发布时间】:2017-12-15 08:40:20
【问题描述】:

我正在尝试像这样更新 Cassandra 中的时间戳字段:

await new Table<MyEntity>(_session).Where(e => e.Id == entity.Id)
    .Select(u => new MyEntity
    { 
        EndDate = DateTimeOffset.UtcNow
    })
    .Update()
    .ExecuteAsync();

但是它会抛出“对象引用未设置为对象的实例”。使用 cassandra 堆栈跟踪:

at Cassandra.Data.Linq.CqlExpressionVisitor.GetPropertyValue(MemberExpression node)
at Cassandra.Data.Linq.CqlExpressionVisitor.GetClosureValue(MemberExpression node)
at Cassandra.Data.Linq.CqlExpressionVisitor.AddProjection(Expression node, PocoColumn column)
at Cassandra.Data.Linq.CqlExpressionVisitor.FillUpdateProjection(MemberExpression node)
at Cassandra.Data.Linq.CqlExpressionVisitor.VisitMemberInit(MemberInitExpression node)
at Cassandra.Data.Linq.CqlExpressionVisitor.VisitLambda[T](Expression`1 node)
at Cassandra.Data.Linq.CqlExpressionVisitor.VisitMethodCall(MethodCallExpression node)
at Cassandra.Data.Linq.CqlExpressionVisitor.GetUpdate(Expression expression, Object[]& values, Nullable`1 ttl, Nullable`1 timestamp, MapperFactory mapperFactory)
at Cassandra.Data.Linq.CqlUpdate.GetCql(Object[]& values)
at Cassandra.Data.Linq.CqlCommand.<ExecuteAsync>d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

尝试更新其他字段可以正常工作,如果我从 .Select 列表中删除 EndDate 字段,它可以正常工作,所以有些东西我没有得到。是否需要某种特殊的时间戳映射?

【问题讨论】:

    标签: c# cassandra cassandra-3.0


    【解决方案1】:

    在我发布此消息后的片刻,我有一个“到底是什么”的时刻并尝试了这个:

    DateTimeOffset endDate = DateTimeOffset.UtcNow;
    
     await new Table<MyEntity>(_session).Where(e => e.Id == entity.Id)
        .Select(u => new MyEntity
        { 
            EndDate = endDate
        })
        .Update()
        .ExecuteAsync();
    

    哪个,嗯。作品。因此,只需在 Select 之外显式定义值即可使其工作。我觉得 Linq 提供者可能有点挑剔!

    【讨论】:

      【解决方案2】:

      CSHARP-577 修复了 Properties 的一些问题,但这个问题与另一个与静态属性相关的问题有关 - CSHARP-778

      CSHARP-778 发布之前,解决方法是完全按照您的做法进行操作,即使用局部变量。

      【讨论】:

        猜你喜欢
        • 2022-08-08
        • 2021-11-28
        • 1970-01-01
        • 2016-05-21
        • 2017-05-29
        • 2017-03-24
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        相关资源
        最近更新 更多