Сбросьте порядковый номер AutoIncrement в Xamarin/sqlite-net-pcl Nuget pkg

Когда я очищаю свою таблицу, я также хотел бы сбросить номер строки автоинкремента. Я нашел несколько сообщений, которые рекомендовали этот код:

DeleteAll<mytable>();
Execute("update sqlite_sequence set seq = 0 where name = 'mytable';");

Когда я запускаю его, я не получаю никаких ошибок, но rowid не сбрасывается. Я также пробовал:

Execute("delete from sqlite_sequence where name = 'mytable';");

... с тем же результатом. Есть ли причуда с sqlite-net-pcl, из-за которой это не работает? Или я что-то упускаю?

Определение таблицы выглядит так:

public partial class mytable : IHasId
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    <other stuff deleted>
}

и IHasId:

public interface IHasId
{
    int Id { get; set; }
}

(Не стреляйте в меня, я написал это в ответ, когда мог, что чизбургер был вещью. В то время это меня забавляло... И нет, стол на самом деле не называется mytable.)

Любая помощь будет принята с благодарностью. Спасибо!


person Karen Cate    schedule 22.03.2018    source источник


Ответы (1)


Я нашел это! Я рад сообщить, что это было что-то глупое. В нашем другом (очень старом, основанном на C++) приложении базы данных наши таблицы во множественном числе, а индексы в единственном числе. Например, таблица «Клиенты» содержит записи со столбцом индекса с именем «клиент». Таким образом, для моих объектов «Клиент» я открыл в базе данных файл с именем «Custs.db3».

Поскольку в примерах использовалась «таблица», я делал это:

Execute("delete from sqlite_sequence where name = 'Custs';");

Что мне было нужно:

Execute("delete from sqlite_sequence where name = 'Customer';");

Итак... Индексы не хранятся по имени "таблица", они хранятся по имени класса "объект".

person Karen Cate    schedule 21.05.2018