2017-07-11 4 views
1

Je suis en train de mettre à jour un champ d'horodatage dans Cassandra comme ceci:Comment mettre à jour le champ d'horodatage dans cassandra avec le pilote C#?

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

Cependant, il jette « référence d'objet non définie à une instance d'un objet. » avec trace de la pile 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() 

Toute tentative de mettre à jour les autres champs, fonctionne bien et si je retire le champ EndDate dans la liste .Choisir cela fonctionne donc il y a quelque chose que je ne comprends pas. Existe-t-il une sorte de mappage spécial pour l'horodatage requis?

Répondre

2

Quelques instants après avoir posté j'avais un "ce que l'enfer" moment et essayé ceci:

DateTimeOffset endDate = DateTimeOffset.UtcNow; 

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

qui, um. travaux. Donc, le fait de définir explicitement la valeur en dehors du Select la fait fonctionner. Je pense que le fournisseur Linq pourrait être un peu difficile!

+1

Ce problème est lié à https://datastax-oss.atlassian.net/browse/CSHARP-577 –