Миграция базы данных Xamarin EF Core удаляет старые данные - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть мобильное приложение Xamarin, в которое я добавил несколько новых функций, для которых я также добавил новые таблицы базы данных.Я также создал новую миграцию для них.Но когда я запускаю эту миграцию, она фактически удаляет все старые данные из базы данных, а не просто добавляет таблицы и т. Д.

Чтобы создать миграцию, я следовал инструкциям MarkSmith.8123 здесь ,И я действительно однажды произвел миграцию, используя те же инструкции.

Чтобы попробовать, я сначала устанавливаю приложение из 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}");
    }

    ...
}

Я ожидаю, что все данные в БД не будут затронуты, в то время как новые таблицы должны были быть добавлены.

Я не знаю, как это проверить дальше.Как я могу видеть, что происходит?

1 Ответ

0 голосов
/ 26 сентября 2019

Приложения для Android находятся в «песочнице».Ваше загруженное приложение не может получить доступ к файлу базы данных приложения, загруженного из магазина Google Play.

При установке из предыдущей фиксации обновление имеет доступ к данным предыдущей версии.

Используйте функции бета-тестирования Google, описанные здесь: https://developer.android.com/distribute/best-practices/launch/test-tracks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...