问题描述
在我的 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 (将#修改为@)