Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin EF Core数据库迁移删除旧数据_C#_Sqlite_Xamarin_Entity Framework Core_Entity Framework Migrations - Fatal编程技术网

C# Xamarin EF Core数据库迁移删除旧数据

C# Xamarin EF Core数据库迁移删除旧数据,c#,sqlite,xamarin,entity-framework-core,entity-framework-migrations,C#,Sqlite,Xamarin,Entity Framework Core,Entity Framework Migrations,我有一个Xamarin移动应用程序,我添加了一些新功能,并为此添加了新的数据库表。我还为此创建了一个新的迁移。但当我运行这个迁移时,它实际上会清除数据库中的所有旧数据,而不仅仅是添加表等 为了创建迁移,我按照MarkSmith.8123的说明进行了操作。我以前也用同样的指令做过一次迁移 为了尝试,我首先从谷歌Play安装了这个应用程序。我登录,进行一些本地更改,然后关闭应用程序。然后,我通过在VisualStudio中调试来安装新版本(带有迁移)。当我再次启动应用程序时,所有旧数据都消失了,请登

我有一个Xamarin移动应用程序,我添加了一些新功能,并为此添加了新的数据库表。我还为此创建了一个新的迁移。但当我运行这个迁移时,它实际上会清除数据库中的所有旧数据,而不仅仅是添加表等

为了创建迁移,我按照MarkSmith.8123的说明进行了操作。我以前也用同样的指令做过一次迁移

为了尝试,我首先从谷歌Play安装了这个应用程序。我登录,进行一些本地更改,然后关闭应用程序。然后,我通过在VisualStudio中调试来安装新版本(带有迁移)。当我再次启动应用程序时,所有旧数据都消失了,请登录信息和本地更改。我还尝试过使用VisualStudio从早期提交(没有新内容)进行第一次安装,没有任何明显的区别

我正在使用Microsoft.EntityFrameworkCore.Sqlite 2.0.1

public class MyDbContext : Microsoft.EntityFrameworkCore.DbContext
{
    ...

    public MyDbContext(string databasePath)
    {
        DatabasePath = databasePath;
        AddInitialMigrationForPreMigrationInstalls();
        Database.Migrate();
    }

    private void AddInitialMigrationForPreMigrationInstalls()
    {
        if (Database.Exists()) // This is just an extension doing: dbFacade.GetService<IRelationalDatabaseCreator>().Exists()
        {
            Database.ExecuteSqlCommand(@"
                CREATE TABLE IF NOT EXISTS ""__EFMigrationsHistory"" (
                    ""MigrationId"" TEXT NOT NULL CONSTRAINT ""PK___EFMigrationsHistory"" PRIMARY KEY,
                    ""ProductVersion"" TEXT NOT NULL
                );

                INSERT OR IGNORE INTO ""__EFMigrationsHistory"" (""MigrationId"", ""ProductVersion"")
                VALUES ('20180829103834_InitialCreate', '2.0.1-rtm-125');        
            ");
        }
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite($"Filename={DatabasePath}");
    }

    ...
}
公共类MyDbContext:Microsoft.EntityFrameworkCore.DbContext
{
...
公共MyDbContext(字符串数据库路径)
{
DatabasePath=数据库路径;
AddInitialMigrationForPreMigrationInstalls();
Database.Migrate();
}
private void AddInitialMigrationForPreMigrationInstalls()的附加迁移
{
if(Database.Exists())//这只是一个执行以下操作的扩展:dbFacade.GetService().Exists()
{
Database.ExecuteSqlCommand(@)
如果不存在,则创建表“”\uuu EFMigrationsHistory“”(
“MigrationId”“文本非空约束”“PK___;EFMigrationHistory”“主键,
“ProductVersion”文本不为空
);
插入或忽略到“\uuu EFMigrationsHistory”(“MigrationId”、“ProductVersion”)中
值('20180829103834_InitialCreate','2.0.1-rtm-125');
");
}
}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseSqlite($“Filename={DatabasePath}”);
}
...
}
我希望数据库中的所有数据都不会被触及,而新表应该已经被添加


我真的不知道如何进一步研究这个问题。我怎样才能看到发生了什么?

Android应用程序都是沙盒。你的侧装应用程序无法访问从Google Play store下载的应用程序的数据库文件

从以前的提交进行安装时,更新可以访问以前版本的数据

使用此处描述的谷歌beta测试功能:

这是有道理的。现在出现了一些其他问题,但我会尽快试用beta测试功能,然后返回这里并标记为答案,如果它解决了我的问题。