我正在使用Xamarin类型PCL开发一个App,对于我的数据库结构,我想使用SQLite,但我有以下疑问...
在我的数据库中输入记录时,ID = 0,在我的数据模型中使用
[PrimaryKey, AutoIncrement]
Public int ViolationID {get; set; }
然而,我在零处进入注册表,我不知道我做错了......或者这是SQLite.NET-PCL包中的错误?
如何验证是否实际输入了这些记录?我的代码中有
public class DataAccess : IDisposable
{
private SQLiteConnection connection;
public DataAccess()
{
var entity = DependencyService.Get<IEntity>();
connection = new SQLiteConnection(entity.Plataforma, System.IO.Path.Combine(entity.DirectorioBD, "Infraccions.db3"));
connection.CreateTable<Infraccion>();
}
public void InsertInfraccion(Infraccion infraccion)
{
connection.Insert(infraccion);
}
public void UpdateInfraccion(Infraccion infraccion)
{
connection.Update(infraccion);
}
public Infraccion GetInfraccion(int InfraccionID)
{
return connection.Table<Infraccion>().FirstOrDefault(c => c.InfraccionID == InfraccionID);
}
public List<Infraccion> GetInfraccions()
{
return connection.Table<Infraccion>().OrderBy(c => c.MotivoID).ToList();
}
public void DeleteInfraccion(Infraccion infraccion)
{
connection.Delete(infraccion);
}
public void Dispose()
{
connection.Dispose();
}
}
我应该在手机上创建一个名为Infraccions.db3的表吗?
感谢您的评论......
答案 0 :(得分:0)
您是说所有新记录的ID都是0并覆盖数据库中的现有记录吗?
如果是这样,那么这就是SQLite的工作原理 - 对于int列0是一个有效值,所以当ID为0时,它将覆盖记录,而不是递增值。
使用int主键的正确方法是将主键定义为可为空的int,这样新记录的值为null,将更新为下一个可用的id:
[PrimaryKey, AutoIncrement]
public int? ViolationID {get; set; }
基本上将int
更改为int?
。
答案 1 :(得分:0)
1)在我的数据库中输入记录时,我的数据中的ID = 0 模型使用
您在模型中使用主键和自动增量表示您无法在主字段中手动输入0,并且在此字段中自动获取下一个值。
2)如何验证这些记录是否实际输入?
您可以在创建数据库时获取数据库文件路径,并且可以打开并查看该数据。
(System.IO.Path.Combine(entity.DirectorioBD, "Infraccions.db3") )
有许多浏览器插件可以访问sqllite数据库。