首页 > 解决方案 > 调用“创建表”以使数据库保持最新是一种好习惯吗?

问题描述

我是 Xamarin 和 SQLite 的新手,所以我问自己,当添加新列时,什么是保持数据库结构最新的好做法。要使用 SQLite DB,我使用的是 SQLite-net-pcl。

我已经阅读了一些解决方案,这些解决方案使用存储在某处的版本字段,用于在版本更改时手动更改数据库结构。

但据我所见,在 SQLiteConnection 上调用 CreateTable 不仅会创建表,还会在底层类更改时更新数据库中的表。

那么,打电话是个好习惯吗

SQLiteConnection db = new SQLiteConnection(dbPath);
db.CreateTable<ClassA>();

每次系统初始化时,保持数据库最新?然后,对 ClassA 的每次更改都将应用于数据库表,而不会丢失任何数据。

标签: c#sqlitexamarinsqlite-net-pcl

解决方案


我测试了这个操作,我得到了以下结果。

首先,我的模型像下面的代码。

public class Prijem
{
    [PrimaryKey, AutoIncrement, Unique]
    public int BCode { get; set; }
    public string Name { get; set; }
    public string FirmName { get; set; }
    public string ItemCode { get; set; }
    public string Count { get; set; }
 }

我使用以下代码插入数据。

await App.Pdatabase.SavePrijemAsync(new Prijem() {Name="New",FirmName="55Fame" ,ItemCode="dg",Count="15"});

我的SavePrijemAsync方法如下代码。

  public Task<int> SavePrijemAsync(Prijem prijem)
    {
        if (IsExisted(prijem))
        {
             return _database.UpdateAsync(prijem);
        }
        else
        {
             return _database.InsertAsync(prijem);

        }
    }

我在 sqlite 数据库中得到了类似以下截图的记录。 在此处输入图像描述

然后我只添加一个名为MyImage

   public class Prijem
{
    [PrimaryKey, AutoIncrement, Unique]
    public int BCode { get; set; }
    public string Name { get; set; }
    public string FirmName { get; set; }
    public string ItemCode { get; set; }
    public string Count { get; set; }

    string image = " Image";
    public string MyImage
    {
        set
        {
            if (image != value)
            {
                image = value;

            }
        }
        get
        {
            return image;
        }
    }

}

我使用了如下代码的更新操作。

 await App.Pdatabase.SavePrijemAsync(new Prijem() {Name="New",FirmName="55Fame" ,ItemCode="dg",Count="15" });

并像下面的代码那样插入操作。

   await App.Pdatabase.SavePrijemAsync(new Prijem() { Name = "New11", FirmName = "55Fame", ItemCode = "dg", Count = "15" });

我在数据库中得到了结果,如下图所示。 在此处输入图像描述

最后,我们可以得到结果,如果我们给模型添加一个属性。此列将添加到 sqlite 数据库中,但默认值我们必须手动更新它的现有数据,如果我们将新值插入数据库,将添加默认值。


推荐阅读