Как вставить запись в sqlite_orm с составным ключом - PullRequest
3 голосов
/ 10 мая 2019

ITNOA

Я использую библиотеку sqlite_orm для использования sqlite в моей программе, и у меня есть таблица, как показано ниже

auto storage = make_storage("test_remove.sqlite",
                                   make_table("objects",
                                              make_column("key_part_1",
                                                          &Object::key_part_1),
                                              make_column("key_part_2",
                                                          &Object::key_part_2),
                                              make_column("name",
                                                          &Object::name),
                                              primary_key(&Object::key_part_1, &Object::key_part_2)));

что, как вы видите, эта таблица имеет составной ключ (key_part_1 и key_part_2). когда я создаю экземпляр из Obejct, как показано ниже

Object object{0, 0, "dummy"};

и попробуйте вставить в таблицу

auto id1 = storage.insert(object);

Я получил исключение.

Итак, мой вопрос, как вставить объект в эту таблицу?

1 Ответ

0 голосов
/ 05 июня 2019

Как вы можете видеть в одном выпуске в GitHub для sqlite_orm проектов с заголовком составного ключа , метод для вставки объекта с составным ключом должен использовать функцию replace вместоinsert функция как ниже

считает, что у вас есть Entity как ниже

struct Object
{
    int key_part_1;
    int key_part_2;
    std::string name;
};

и создайте схему как ниже


auto storage = make_storage("test_remove.sqlite",
                            make_table("objects",
                                  make_column("key_part_1",
                                               &Object::key_part_1),
                                  make_column("key_part_2",
                                               &Object::key_part_2),
                                  make_column("name",
                                               &Object::name),
                                  primary_key(&Object::key_part_1, &Object::key_part_2)));

Таким образом, вы можете вставить одно мгновение этой сущностикак показано ниже

Object object{0, 0, "Skillet"};

storage.replace(object);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...