如何解决Xamarin 在不丢失现有数据的情况下更改数据库结构添加列、表即移动设备上的迁移
在我的 Xamarin 项目中,我使用了
Microsoft.EntityFrameworkCore.sqlite.Core(目前版本 3.1.9)
package.我也有 sqlite-net-pcl,但我更喜欢使用实体框架核心 sqlite 的解决方案。
这是我正在使用的: https://docs.microsoft.com/en-us/ef/core/get-started/xamarin。
需要一个适用于所有平台(iOS、Android、UWP)的解决方案。
每当我通过添加列或添加表(在本例中通过添加事务表)、重命名表/列等更改 Xamarin 移动项目中的 sqlite 数据库时。运行现有安装并尝试执行 PutTransaction (Transaction t)(这是有道理的,因为我修改了本地数据库):
sqlite 错误 1:“没有这样的表:交易”。 (如果测试人员删除他们的整个应用程序安装并使用新的 db 文件重新安装,这将消失)
如何在提交新构建进行测试时更改数据库结构,而测试人员不必因为数据库被修改而删除整个应用程序安装(和数据库文件)?
Xamarin 中是否有任何方法可以为这个特定的 sqlite nuget 包自动在 sqlite 中自动实现 MIGRATIONS?
public class MyMobileAppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Transaction> Transactions { get; set; }
public MyMobileAppDbContext()
{
sqlitePCL.Batteries_V2.Init();
this.Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dbPath = Path.Combine(FileSystem.AppDataDirectory,AppConstants.Constants.DatabaseFilename);
optionsBuilder
.Usesqlite($"Filename={dbPath}");
}
}
用户表:
public class User
{
public User()
{
Created = DateTime.Now;
}
[PrimaryKey]
public Guid Id { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Created { get; set; }
public string HashedPassword { get; set; }
}
假设后来添加了一个名为 Transaction 类的辅助表:
public class Transaction
{
[PrimaryKey]
public Guid Id { get; set; }
public DateTime PerformedOn { get; set; }
public string Type { get;set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。