Я разрабатываю приложение для Android, которое использует SQLite в качестве локальной базы данных. Приложение синхронизирует данные, полученные из веб-api, и сохраняет их в локальной базе данных. Все классы модели имеют свой ID-свойство, заданный как Первичный ключ, и Auto incremented, поэтому я могу вручную вводить данные без указания идентификатора. Проблема в том, что когда я вставляю данные из API в SQlite, идентификатор объекта игнорируется, а Sqlite дает объекту новый идентификатор. Я хочу, чтобы данные хранились с тем же идентификатором, что и объект, который хранится.Предотвращение дублирования данных в базе данных SQLite
Веб-api возвращает списки объектов, у которых есть свой ID-тип, но объекты SQLite имеют свои первичные ключи как int. Это причина, по которой значения идентификатора не сохраняются, потому что их типы данных не совпадают? Я не могу изменить тип данных в моей базе данных SQL, откуда поступают данные, поскольку в нем есть сотни таблиц. Есть ли способ обойти это?
Это код для вставки или обновляет данные в моей локальной БД:
}
public async Task<string> insertUpdateVideoData(Video_Struct data)
{
try
{
var db = new SQLiteAsyncConnection(dbPath);
var m = GetVideos();
if (await db.FindAsync<Video_Struct>(f => f.VideoID == data.VideoID) != null)
{
await db.UpdateAsync(data);
}
else
{
if (await db.InsertAsync(data) != 0)
{
await db.UpdateAsync(data);
}
}
return "Single data file inserted or updated";
}
catch (SQLiteException ex)
{
return ex.Message;
}
}
Это код, чтобы получить объекты данных из API:
public async Task<List<Video_Struct>> GetVideoData()
{
List<Video_Struct> vids = new List<Video_Struct>();
WebClient mClient = new WebClient();
var output = await mClient.DownloadDataTaskAsync(new Uri(GlobalVariables.host + "/api/media/getmedia"));
var json = Encoding.UTF8.GetString(output);
vids = JsonConvert.DeserializeObject<List<Video_Struct>>(json);
return vids;
}
На основе [этого ответа] (http://stackoverflow.com/questions/3388098/sqlite-data-types) типы данных SQLite для каждого значения, а не для столбца, поэтому любой тип, который вы пишете, должен быть тем, что вы получаете назад. –
Если значения идентификатора совпадают, то почему вставленные данные получают значение, отличное от того, которое я получаю от объекта API? –
Покажите нам код, в котором вы читаете и пишите. –