c# - 调用“创建表”以使数据库保持最新是一种好习惯吗?
问题描述
我是 Xamarin 和 SQLite 的新手,所以我问自己,当添加新列时,什么是保持数据库结构最新的好做法。要使用 SQLite DB,我使用的是 SQLite-net-pcl。
我已经阅读了一些解决方案,这些解决方案使用存储在某处的版本字段,用于在版本更改时手动更改数据库结构。
但据我所见,在 SQLiteConnection 上调用 CreateTable 不仅会创建表,还会在底层类更改时更新数据库中的表。
那么,打电话是个好习惯吗
SQLiteConnection db = new SQLiteConnection(dbPath);
db.CreateTable<ClassA>();
每次系统初始化时,保持数据库最新?然后,对 ClassA 的每次更改都将应用于数据库表,而不会丢失任何数据。
解决方案
我测试了这个操作,我得到了以下结果。
首先,我的模型像下面的代码。
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);
}
}
然后我只添加一个名为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 数据库中,但默认值我们必须手动更新它的现有数据,如果我们将新值插入数据库,将添加默认值。
推荐阅读
- python - 如何制作具有多项选择的 GTK 2 列表?
- javascript - 渲染 D3 分层边缘捆绑
- php - AWS SES SMTP 电子邮件有效。AWS SES API 不发送电子邮件
- .net-core - .Net Core 或 Mono 包含更多命名空间?
- python - 使用 read_csv 方法读取 csv 数据时如何修复 ParseError?
- python - pandas时间序列索引和statsmodel中的频率
- qt - 使用 CMAKE_PREFIX_PATH 进行多配置构建
- java - 如何使用 Jsoup 库获取对象的所有详细信息并将其保存到 bean?
- python - 如何在某些条件下获取特定日期之前的行数
- node.js - 无法通过 Docker 运行(Linux 容器)或创建映像(Windows 容器)Gatsby React 站点(win 二进制文件错误,匹配清单错误)