SQLite Xamarin PCL

时间:2017-07-31 03:13:08

标签: database sqlite xamarin xamarin.forms sqlite.net

我正在使用Xamarin类型PCL开发一个App,对于我的数据库结构,我想使用SQLite,但我有以下疑问...

  1. 在我的数据库中输入记录时,ID = 0,在我的数据模型中使用

     [PrimaryKey, AutoIncrement]
         Public int ViolationID {get; set; }
    
  2. 然而,我在零处进入注册表,我不知道我做错了......或者这是SQLite.NET-PCL包中的错误?

    1. 如何验证是否实际输入了这些记录?我的代码中有

      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();
          }
      }
      
    2. 我应该在手机上创建一个名为Infraccions.db3的表吗?

      感谢您的评论......

2 个答案:

答案 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数据库。