EF7 with SQLite

entity-framework-core sqlite

質問

私はSQLite DBをEF7で作業しようとしています。以下のようにSystem.Data.SQLite.SQLiteConnectionStringBuilder()で接続文字列を初期化します。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var connectionStringBuilder = new SQLiteConnectionStringBuilder() { DataSource = Constants.DataDBPath };
    connectionStringBuilder.DefaultTimeout = 5000;
    connectionStringBuilder.SyncMode = SynchronizationModes.Off;
    connectionStringBuilder.JournalMode = SQLiteJournalModeEnum.Memory;
    connectionStringBuilder.PageSize = 65536;
    connectionStringBuilder.CacheSize = 16777216;
    connectionStringBuilder.FailIfMissing = false;
    connectionStringBuilder.ReadOnly = false;
    connectionStringBuilder.Version = 3;
    var connectionString = connectionStringBuilder.ToString();
    var connection = new SQLiteConnection() { ConnectionString = connectionString };
    optionsBuilder.UseSqlite(connection);
}

次のエラーが表示されます。

指定されたキャストは無効です。

コマンド:

isExists = context.Blocks.Where(w => w.Hash == hash).Any();

そして、以下のようにMicrosoft.Data.Sqlite.SqliteConnectionStringBuilder()で接続文字列を初期化すると、

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var connectionStringBuilder = new SqliteConnectionStringBuilder() { DataSource = Constants.DataDBPath  };
    var connectionString = connectionStringBuilder.ToString();
    var connection = new SQLiteConnection() { ConnectionString = connectionString };
    optionsBuilder.UseSqlite(connection);
}

私は何の誤りもありません。すべて動作しますが、アップデートは遅いです。以前の接続文字列ビルダーのようにパフォーマンスを向上させるためにデータベースを構成する方法がわかりません。 「同期=オフ;プーリング= True;」などのパラメータを手動で追加しようとすると接続文字列には、パラメータが認識されないという例外があります。

助けてください。

更新:

私は試した:

using (var context = new DataDBContext())
{
    var connection = context.Database.GetDbConnection();
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = "PRAGMA synchronous=OFF; PRAGMA journal_mode=OFF; PRAGMA count_changes=OFF; PRAGMA temp_store=OFF; PRAGMA page_size=65536; PRAGMA cache_size=-16777216;";
    command.ExecuteNonQuery();
}

しかし、それは役に立たなかった。

人気のある回答

EFコアで提供されるMicrosoft提供プロバイダを使用する必要があり、System.Data.Sqliteの接続文字列オプションの小さなサブセットのみをサポートします。プラグマステートメントで設定できるオプションの多く



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ