У меня есть простой объект:Xamarin Sqlite Вставка не возвращает последний первичный ключ идентификатора
[Table("History")]
public class History
{
[PrimaryKey, AutoIncrement, Column("_id")]
public int Id { get; set; }
[Indexed(Name = "IDX_History", Order = 1, Unique = true)]
public int Prefix { get; set; }
[Indexed(Name = "IDX_History", Order = 2, Unique = true)]
public int Stem { get; set; }
[Indexed(Name = "IDX_History", Order = 3, Unique = true)]
public int Suffix { get; set; }
[Indexed(Name = "IDX_Favourite")]
public bool IsFavourite { get; set; }
public DateTime LastViewed { get; set; } = DateTime.Now;
}
Я пытаюсь сделать вставку, если ее новым или получить последний вставленный идентификатор, если он уже существует:
public static int SaveSolutionToHistory(Solution sol)
{
lock (_db)
{
var existingHistory = _db.Table<History>().FirstOrDefault(h => h.Prefix == sol.Prefix.Id
&& h.Stem == sol.Stem.Id
&& h.Suffix == sol.Suffix.Id);
if (existingHistory != null)
{
existingHistory.LastViewed = DateTime.Now;
_db.Update(existingHistory);
return existingHistory.Id;
}
_db.Insert(new History
{
Prefix = sol.Prefix.Id,
Stem = sol.Stem.Id,
Suffix = sol.Suffix.Id
});
return _db.ExecuteScalar<int>("SELECT last_insert_rowid()");
}
}
верхняя часть работает отлично в возвращающей идентификатор для существующих записей, но по какой-то причине код вставки всегда возвращает , когда он должен вернуть последний вставленный первичный автоинкрементного идентификатор (как указан в методах XML комментариях):
_db.Insert(new History
{
Prefix = sol.Prefix.Id,
Stem = sol.Stem.Id,
Suffix = sol.Suffix.Id
});
И это возвращает правильный идентификатор:
return _db.ExecuteScalar<int>("SELECT last_insert_rowid()");
Это кажется неэффективным для меня сделать два удара, как это или сделать это в качестве не сильно типизированных. Есть ли причина, почему _db.Insert
не возвращает правильный идентификатор?
Я использую VS 2015, с HAXM и Marshmallow x86_64 Google API Image.