首页 > 解决方案 > Cassandra/DataStax 客户端未从键空间返回 UDT 对象

问题描述

我在 Cassandra

Employee UDT 中创建了 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");

我收到以下错误:

错误

请看一下,如果有任何遗漏,请告诉我。

标签: cassandradatastax

解决方案


错误是正确的,您的表定义没有名称employee为 type的列employee。修改表定义以包含相应的列。

更新,基于讨论:您真正需要的是作为 C# 驱动程序的一部分提供的对象映射器。

用户定义类型只是将事物组合在一起以将它们表示为表中的一列的一种方式。例如,您可以将地址表示为 UDT,其中包含街道、城市、邮政编码、州、国家/地区字段,并将此 UDT 作为一列放在表中。或者,您可以将所有这些信息作为单独的列放入表中。但是,如果您有多个表使用相同的信息,那么使用 UDT 会更容易,并且每个表有一列......


推荐阅读