Как справиться с проблемой обновления первичного ключа для автономного приложения с помощью Realm?

Я работаю над приложением, которое также предлагает автономные функции. Рабочий процесс моего приложения аналогичен следующему:

1- Пользователь создает новый объект в базе данных в автономном режиме.

2- Этот объект получает временный (отрицательный) идентификатор, так как приложение еще не знает, какой окончательный идентификатор сервер назначит объекту.

3- Пользователь/приложение синхронизирует базу данных, когда снова в сети

4- Сервер получает новый объект и присваивает ему окончательный идентификатор.

5- Приложение получает окончательный идентификатор с сервера и обновляет идентификатор объектов до окончательного.

Я использую базу данных области, которая не позволяет обновлять первичный ключ. Я хочу, чтобы вы предложили переклассифицировать эту проблему, чтобы узнать, как справиться с этой ситуацией.


person Sharjeel Haider    schedule 25.04.2017    source источник
comment
Могут ли быть более одного пользователя, заинтересованные в одних и тех же данных, или возможно, что пользователь удалит свои локальные данные и должен снова получить данные с сервера?   -  person CL.    schedule 25.04.2017
comment
@КЛ. Проблема в том, что одна запись таблицы связана со всей БД. Если пользователь не выходит в сеть в течение нескольких дней и создает сотни автономных записей, и эти записи зависят от других записей, поскольку создается целое дерево.   -  person Sharjeel Haider    schedule 25.04.2017
comment
Я не об этом спрашивал, а есть ли синхронизация новых данных с сервера на клиент.   -  person CL.    schedule 25.04.2017
comment
Да есть синхронизация новых данных.   -  person Sharjeel Haider    schedule 25.04.2017


Ответы (2)


В вашем приложении уже есть функция загрузки новых данных с сервера, которые вы можете использовать повторно: после того, как приложение загрузит все временные объекты на сервер и сервер подтвердит их сохранение, просто удалите все временные объекты из вашей локальной базы данных. , и выполните синхронизацию сервер→клиент.

В качестве альтернативы не используйте временные объекты, т. е. изменяйте первичный ключ, чтобы он уже был уникальным, когда ваше приложение его создает; документация Realm рекомендует

вы используете строковое свойство, так как проще генерировать значения, которые гарантированно будут уникальными (особенно с классами UUID в платформах Apple и .NET).

person CL.    schedule 25.04.2017

Используйте @PrimaryKey для идентификатора, который вы хотите рассматривать как первичный ключ.

person Vijay Pal Vishwakarma    schedule 25.04.2017
comment
Я не спрашиваю о настройке первичного ключа. Пожалуйста, посмотрите на вопрос еще раз, чтобы понять проблему - person Sharjeel Haider; 25.04.2017
comment
Извините, я думаю, вам нужно удалить все элементы временного идентификатора из БД, а затем вставить новые элементы. Вы не можете обновить первичный ключ. - person Vijay Pal Vishwakarma; 25.04.2017