Как очистить локальную базу данных с помощью мобильных служб Azure? - PullRequest
0 голосов
/ 28 мая 2018

Я использую мобильные службы Azure и хочу очистить локальную базу данных, как я могу это сделать?

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

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Вы можете удалить все локальные файлы БД, выполнив следующие действия.

var dbFiles = Directory.GetFiles(MobileServiceClient.DefaultDatabasePath, "*.db");
foreach (var db in dbFiles)
{
    File.Delete(db);
} 

Однако при этом все данные будут удаляться каждый раз и вызывать проблемы с производительностью, поскольку каждый раз после этого вы будете получать свежую копию данных из базы данных Azure, а не использоватькэшированная копия в БД SQLite устройства.

Обычно мы используем это только для отладки, и причина в foreach состоит в том, чтобы захватить все созданные базы данных (см. мое последнее предложение)

Есть несколько других вещей, которые вы могли бы попытаться обойти по своей основной проблеме пересечения данных.


Есть еще одна причина, по которой вы можете видеть это поведение.С вашим PullAsync вы передаете ему идентификатор запроса?Ваша строка PullAsync должна выглядеть примерно так:

GetAllFoo(string userId)
{
    return await fooTable.PullAsync("allFoo"+userId,fooTable.Where(f=>f.userId == userId));
}

Обратите внимание, что идентификатор запроса будет уникальным каждый раз (или, по крайней мере, для каждого пользователя).Это используется в основном частью автономной синхронизации Azure, но в сочетании с оператором Where (обязательно импортируйте System.Linq), это должно обеспечить возвращение только правильных данных.

Вы можете найти более подробную информацию об этом здесь .


Кроме того, некоторые вещи, которые вы можете рассмотреть, сохраняют отдельную базу данных для каждого userId.Мы делаем это для нашего приложения (с идентификатором компании), чтобы каждая база данных была отдельной.Если вы сделаете это и используете правильную базу данных при входе в систему, нет никакой вероятности того, что данные будут пересекаться.

0 голосов
/ 29 мая 2018

Я использую мобильные службы Azure и хочу очистить локальную базу данных, как я могу это сделать?

Для удаления файла SQLite вы можете выполнить Удалениебэк-магазин .Кроме того, вы можете использовать возможность, предоставляемую IMobileServiceSyncTable, для очистки записей в автономном кэше, подробности которых вы можете использовать Очистка записей из автономного кэша .

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

Поскольку вы не предоставили подробную информацию о ваших реализациях (например, вход / выход пользователя, управление данными пользователя и т. Д.), Я бы порекомендовал вамубедитесь, что на стороне сервера / клиента включено хранилище данных для каждого пользователя.Вы можете использовать fiddler для захвата сетевых следов, когда другой пользователь входит в систему, и убедиться, что возвращен правильный идентификатор пользователя (например, UserId), а затем проверить запрос в вашей локальной базе данных.Более того, я бы порекомендовал вам следовать книге Адриана Холла о Проекция данных и запросы .

...