2016-04-09 15 views
0

私はSQLite DBをEF7で処理しようとしています。 私はSystem.Data.SQLite.SQLiteConnectionStringBuilder(との接続文字列を初期化する)以下のように:コマンドでEF7 with SQLite

Specified cast is not valid.

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

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); 
} 

私は次のエラーを取得します

そして、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); 
} 

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

助けてください。

UPDATE:

は、私が試した:

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(); 
} 

しかし、それは助けにはなりませんでした。

+2

EntityFrameworkで問題が発生しました。 https://github.com/aspnet/EntityFramework/issues/5024 – shlatchz

答えて

1

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

+0

接続文字列にプラグマステートメントを挿入する場所はどこですか? – shlatchz

+2

"context.Database.ExecuteSqlCommand"を使ってコード内でプラグマを実行しようとしましたが、実行されませんでした。ジャーナルがディスク上に作成され、メモリには作成されていないことがわかります。 – shlatchz

+0

生のdbconnectionとExecuteNonQueryを使う必要があると思います – ErikEJ

関連する問題