微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin 在不丢失现有数据的情况下更改数据库结构添加列、表即移动设备上的迁移

如何解决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 举报,一经查实,本站将立刻删除。