【问题标题】:Creating a table using Datastax Cassandra .NET Client使用 Datastax Cassandra .NET 客户端创建表
【发布时间】:2013-06-19 14:20:41
【问题描述】:

我正在试用 DataStax Cassandra .NET 驱动程序,并且我正在尝试实现比字符串桶更复杂的东西(请参阅https://gist.github.com/peschkaj/5794713)。

当我尝试使用

创建表时
var table = session.GetTable<SalesOrder>();
table.CreateIfNotExists();

我得到以下异常:

System.InvalidOperationException: Operation is not valid due to the current state of the object
  at Cassandra.Data.Linq.CqlQueryTools.GetCqlTypeFromType (System.Type tpy) [0x00000] in <filename unknown>:0
  at Cassandra.Data.Linq.CqlQueryTools.GetCreateCQL (ITable table) [0x00000] in <filename unknown>:0
  at Cassandra.Data.Linq.Table`1[CassandraTest.SalesOrder].Create (ConsistencyLevel consictencyLevel) [0x00000] in <filename unknown>:0
  at Cassandra.Data.Linq.Table`1[CassandraTest.SalesOrder].CreateIfNotExists (ConsistencyLevel consictencyLevel) [0x00000] in <filename unknown>:0
  at CassandraTest.MainClass.Main (System.String[] args) [0x00056] in /Users/jeremiah/Projects/CassandraTest/CassandraTest/Program.cs:71

操作失败,部分原因是DateTime,部分原因是自定义类型。使用 C# 驱动程序将复杂对象保存回 Cassandra 的适当语法/模式/等是什么?

【问题讨论】:

    标签: c# cassandra


    【解决方案1】:

    查看代码,驱动程序似乎只有timestamp -> DateTimeOffset 类型的映射(请参阅code)。如果您将 DateTime 对象更改为 DateTimeOffset,它可以解决该问题。不过,我对他们忽略了 DateTime 类型的映射这一事实并不感到兴奋。

    驱动程序不理解您的嵌套复杂类型AddressLineItem,也没有内置方法 (ORM) 可以做到这一点。我看到两个选项:

    1. 将您的对象序列化为 JSON,然后“值”列可以只是您的 JSON 字符串。获取后,您从 JSON 中重新水合您的 .NET 对象。这就是我们在 CQL 2.0 实现中所做的,也是 CQL 2.0 的唯一选择。它运作良好。我们在所有地方都这样做,与我们在应用程序中所做的其他事情相比,我们测量的开销可以忽略不计。
    2. 因为您的AddressLineItem 类仅包含原始类型,您可以将它们表示为Dictionary&lt;K,V&gt;,它转换为CQL 3.0 map 数据类型。同样,如果您想要一个强类型对象,则需要手动干预。
      • ListItem 的问题在于 CQL 3.0 list 不能包含另一个集合 - 在本例中为 map。为此,您又回到了 JSON,当然优点是您可以根据需要变得复杂,只要它是可序列化的。

    我分叉了你的要点并做了一些粗略的调整,让你了解如何让这个基本示例工作。 https://gist.github.com/dlbromen/5811969

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 2016-01-25
      • 2014-02-23
      • 2013-06-29
      • 2011-01-20
      • 2015-12-26
      • 2018-11-25
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多