0

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

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

     [PrimaryKey, AutoIncrement]
         Public int ViolationID {get; set; }
    

仍然,我以零进入注册表,我不知道我做错了......或者这是 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();
        }
    }
    

我应该在手机上创建一个名为 Infraccions.db3 的表吗?

谢谢您的意见...

4

2 回答 2

0

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

您在模型中使用主键和自动增量,这意味着您无法在主字段中手动输入 0,它会自动在该字段中获取下一个值。

2) 我如何验证这些记录是否确实被输入?

您可以在创建数据库时获取数据库文件路径,并且可以打开并查看该数据。

(System.IO.Path.Combine(entity.DirectorioBD, "Infraccions.db3") )

有许多浏览器插件可以访问 sqllite 数据库。

于 2017-07-31T05:25:47.487 回答
0

您是说所有新记录的 ID 为 0 并覆盖数据库中的现有记录吗?

如果是这样,那么这就是 SQLite 的工作方式 - 因为 int 列 0 是一个有效值,所以当 ID 为 0 时,它将覆盖记录,而不是增加值。

使用 int 主键的正确方法是将主键定义为可为空的 int,这样新记录的值为 null,它将更新为下一个可用的 id:

[PrimaryKey, AutoIncrement]
public int? ViolationID {get; set; }

本质上更改intint?.

于 2017-07-31T05:23:16.957 回答