cassandra - Cassandra/DataStax 客户端未从键空间返回 UDT 对象
问题描述
我在 Cassandra
Employee UDT 中创建了 UDT
对应的c#类如下:
public class Employee
{
public int emp_id { get; set; }
public string emp_name { get; set; }
public int emp_age { get; set; }
}
以下代码将 UDT 与相应的 c# 类连接和映射:
var cluster = Cluster.Builder()
.AddContactPoint("localhost")
.Build();
ISession session = cluster.Connect("firstkeyspace");
//session.UserDefinedTypes.Define(UdtMap.For<Employee>().Automap());
session.UserDefinedTypes.Define(UdtMap.For<Employee>("employee", keyspace: "firstkeyspace"));
var rs = session.Execute("select * from employee");
在使用以下代码行检索时:
Employee employee = row.GetValue<Employee>("employee");
我收到以下错误:
请看一下,如果有任何遗漏,请告诉我。
解决方案
错误是正确的,您的表定义没有名称employee
为 type的列employee
。修改表定义以包含相应的列。
更新,基于讨论:您真正需要的是作为 C# 驱动程序的一部分提供的对象映射器。
用户定义类型只是将事物组合在一起以将它们表示为表中的一列的一种方式。例如,您可以将地址表示为 UDT,其中包含街道、城市、邮政编码、州、国家/地区字段,并将此 UDT 作为一列放在表中。或者,您可以将所有这些信息作为单独的列放入表中。但是,如果您有多个表使用相同的信息,那么使用 UDT 会更容易,并且每个表有一列......
推荐阅读
- swift - SWIFTUI:当我有初始化声明时,使用环境演示模型关闭按钮单击视图
- html - 我正在尝试使用复选框实现 ext js 组合框。当我从上下滚动的列表中选择项目时,这很好用
- python - 如何单击仅具有锚点和 href 以及 nbor 标记的元素
- html - 如果视口上没有足够的空间,视频元素将低于前一个元素
- ruby - Ruby setter 的返回值
- javascript - window.ScrollHeight 和 window.ClientHeight 在 javascript 中返回相同的值
- android - 如何在 Android 中以编程方式截屏并分享
- javascript - 如何获取有关随机智能合约地址的数据。如创建日期、链表、持有者(持有多少个钱包)
- kdb - 如何计算 KDB 中的 30 天滚动窗口?
- mysql - MySQL 查询以根据自定义列名和值获取值