Клиент Cassandra / DataStax не возвращает объект UDT из пространства ключей - PullRequest
0 голосов
/ 19 апреля 2020

Я создал UDT в Кассандре

Сотрудник UDT
Employee 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");

Я получаю следующую ошибку:

error

Пожалуйста, посмотрите и дайте мне знать, если что-то пропало.

1 Ответ

0 голосов
/ 19 апреля 2020

Ошибка верна, в вашем определении таблицы нет столбца с именем employee с типом employee. Измените определение таблицы, включив в него соответствующий столбец.

Обновление на основе обсуждения: вам действительно нужен сопоставитель объектов , доступный в составе драйвера C#.

Пользовательские типы - это просто способ сгруппировать вещи, чтобы представить их как один столбец внутри таблицы. Например, вы можете представить адрес как UDT с полями улица, город, почтовый индекс, штат, страна и поместить этот UDT в один столбец в вашей таблице. Или вы можете поместить всю эту информацию в виде отдельных столбцов в таблице. Но если у вас есть несколько таблиц, использующих одну и ту же информацию, тогда проще использовать UDT и иметь один столбец на таблицу ...

...