Падает сохранение объекта со вложенными таблицами, при использовании автоинкремента (SQLite)
При использовании автоинкремента в идентификаторах и ПодчиненнаяТаблица, сохранение "главной" сущности выкидывает исключение Внешнее исключение (Microsoft.Data.Sqlite.SqliteException): SQLite Error 19: 'FOREIGN KEY constraint failed'.
Пример кода:
//Файл Источник.os
&ПодчиненнаяТаблица(Тип = "Массив", ТипЭлемента = "ОписаниеПараметра")
Перем Параметры Экспорт;
МенеджерСущностей.ДобавитьКлассВМодель(Тип("ОписаниеПараметра"));
МенеджерСущностей.ДобавитьКлассВМодель(Тип("ОписаниеИсточника"));
МенеджерСущностей.Инициализировать();
Параметр = Параметры.Создать();
Параметр.Имя = "Тест";
Параметр.Значение = "фывыфв";
Параметр.Сохранить();
Источник = Источники.Создать();
Источник.Наименование = "Тест";
Источник.Тип = "Файл";
Источник.Параметры.Добавить(Параметр);
Источник.Сохранить();
Можно взглянуть на объявление класса "ОписаниеПараметра"?
Можно взглянуть на объявление класса "ОписаниеПараметра"?
&Идентификатор
&ГенерируемоеЗначение
&Колонка(Тип = "Целое")
Перем Идентификатор Экспорт;
&Колонка(Тип = "Строка")
Перем Имя Экспорт;
&Колонка(Тип = "Строка")
Перем Значение Экспорт;
develop-ветка? можешь включить вывод лога oscript.lib.entity.connector.sqlite в DEBUG?
https://pastebin.com/VGERrfvk
ветка и девелоп и @otymko которая с ПГ
Еще трабл с удалением. Я кстати заметил, что не удаляется записи в таблице связей, в моей примере это ОписаниеИсточника_Параметры, сделал так
Сущность.Параметры.Очистить(); Сущность.Записать(); Сущность.Удалить();
так работает кароч) Вопрос тогда в том баг или фича это?
Включи еще лог oscript.lib.entity.manager, пожалуйста.
https://pastebin.com/27uVSimT чет он мало логирует совсем :(
Такое же исключение возникает и при использовании ссылок при записи "главной" сущности, недавно мы обсуждали это в телеграмме https://t.me/oscript_library/61236. Увидел похожий ишуз не стал заводить новый. Пока решил вопрос так:
Исправил функцию: https://github.com/nixel2007/entity/blob/9172c8f270361fa1cb1b74bc010ff0de8b8d5d7c/src/internal/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0SQLiteWeb.os#L17
на:
Функция ИДПоследнейДобавленнойЗаписи(Соединение, Запрос) Экспорт
Запрос = НовыйЗапрос(Соединение);
Запрос.Текст = "SELECT last_insert_rowid();";
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат[0].Получить(0);
КонецФункции
Вообще это выглядит как вполне валидный фикс изначально невалидной обработки результата запроса... Правильно понимаю, что этот фикс чинит обе проблемы?
Я кроме окружения oscript.web не пробовал.
А этот коннектор как раз специализирован для ос.веба