У меня есть мобильное приложение 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}");
}
...
}
Я ожидаю, что все данные в БД не будут затронуты, в то время как новые таблицы должны были быть добавлены.
Я не знаю, как это проверить дальше.Как я могу видеть, что происходит?