Как запустить миграцию с помощью Entity Framework Core в зашифрованной базе данных SQLite? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть консольное приложение ASP. NET Core (для версии 2.2), использующее Entity Framework Core. Я пытаюсь подключиться к пустой зашифрованной базе данных SQLite, созданной с помощью DB Browser для SQLCipher. После создания соединения я пытаюсь перенести базу данных, но получаю 'SQLite Error 26: 'file is not a database'.'

Вот мой код:

var connection = new SqliteConnection(@"Data Source=Sqlite\test.db;");

connection.Open();

var command = connection.CreateCommand();
var password = "test";
command.CommandText = "SELECT quote($password);";
command.Parameters.AddWithValue("$password", password);
var quotedPassword = (string)command.ExecuteScalar();

command.CommandText = "PRAGMA key = " + quotedPassword;
command.Parameters.Clear();
var result = command.ExecuteNonQuery();

services.AddDbContext<SmartContext>(options =>
        options.UseSqlite(connection));

var serviceProvider = services.BuildServiceProvider();
var context = serviceProvider.GetService<MyContext>();

Console.WriteLine("Migrating sqlite database");

context.Database.Migrate();

Я могу подключиться к база данных в DB Browser и SQLiteStudio .

Я посмотрел на этот репозиторий и у меня есть SQLitePCLRaw.bundle_sqlcipher ( 1.1.11) , SQLitePCLRaw.bundle_green (1.1.11) , Microsoft.EntityFrameworkCore.Design (2.2.6) , Microsoft.EntityFrameworkCore.Sqlite.Core (2.2.6) пакетов добавлено в мой проект.

Я просмотрел множество постов на многих форумах, но ни в одном из них не упоминается миграция с зашифрованными базами данных. Возможно, я упускаю что-то действительно очевидное, но любая помощь в преодолении этой ошибки будет принята с благодарностью, спасибо!

...