gpt4 book ai didi

c# - 使用 Datastax Cassandra .NET 客户端创建表

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:43 25 4
gpt4 key购买 nike

我正在试用 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 的适当语法/模式/等是什么?

最佳答案

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

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

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

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

关于c# - 使用 Datastax Cassandra .NET 客户端创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com