【问题标题】:Cassandra/DataStax client is not returning UDT object from the keyspaceCassandra/DataStax 客户端未从键空间返回 UDT 对象
【发布时间】:2020-08-02 02:15:14
【问题描述】:

我在 Cassandra 中创建了 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");

我收到以下错误:

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

【问题讨论】:

    标签: cassandra datastax


    【解决方案1】:

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

    更新,基于讨论:您真正需要的是作为 C# 驱动程序的一部分提供的 object mapper

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

    【讨论】:

    • 当它是 UDT 或表时,为什么我应该将员工指定为列?我的 UDT 只有三列,即 emp_id、emp_age 和 emp_name。包含我没有的员工列看起来不合适。
    • 但是您试图从一行中获取名称为employee 的列,而您的表没有它...
    • 我正在尝试获取整个数据行而不是特定列。我相信这是创建用户定义类型并将其映射到相应类的全部目的,以便我们可以检索整个记录而不是列。
    • 否 - 用户定义类型只是将事物组合在一起以将它们表示为表中的一列的一种方式。例如,您可以将地址表示为 UDT,其中包含街道、城市、邮政编码、州、国家/地区字段,并将此 UDT 作为一列放在表中。或者,您可以将所有这些信息作为单独的列放入表中。但是,如果您有多个表使用相同的信息,那么使用 UDT 会更容易,并且每个表有一列...
    • 你的语言确实需要 Object Mapper - 我已经更新了答案
    猜你喜欢
    • 1970-01-01
    • 2018-01-31
    • 2016-01-25
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多