簡體   English   中英

Xamarin EF Core 數據庫遷移刪除舊數據

[英]Xamarin EF Core database migration deletes old data

我有一個 Xamarin 移動應用程序,我添加了一些新功能,為此我還添加了新的數據庫表。 我還為這些創建了一個新的遷移。 但是當我運行此遷移時,它實際上會清除數據庫中的所有舊數據,而不僅僅是添加表等。

為了創建遷移,我按照 MarkSmith.8123 here的說明進行操作。 實際上,我之前使用相同的說明進行過一次遷移。

為了嘗試它,我首先從 Google Play 安裝該應用程序。 我登錄,進行一些本地更改,然后關閉應用程序。 然后我通過在 Visual Studio 中調試來安裝新版本(帶有遷移)。 當我再次啟動應用程序時,所有舊數據都消失了,登錄信息和本地更改。 我還嘗試使用 Visual Studio 從較早的提交(沒有新東西)進行第一次安裝,沒有任何明顯的區別。

我正在使用 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}");
    }

    ...
}

我希望 db 中的所有數據都保持不變,而應該添加新表。

我真的不知道如何進一步檢查。 我怎樣才能看到發生了什么?

Android 應用程序是沙盒的。 您的側載應用程序無法訪問從 Google Play 商店下載的應用程序的數據庫文件。

當您從先前的提交安裝時,更新可以訪問先前版本的數據。

使用此處描述的 Google 的 beta 測試功能:https://developer.android.com/distribute/best-practices/launch/test-tracks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM