2016-10-06 36 views
3

Entity Framework Coreを使用してWPFアプリケーション内で使用するために、パスワードで保護されたSQLiteデータベースを作成しようとしています。Entity Frameworkコアを使用してパスワードで保護されたSQLite

私は既存のSQLite DB(データベースの最初のアプローチ)から私のDbContextとEntitiesを生成する方法を見つけましたが、パスワードで保護されたDBで動作させることはできません。

実際には、パスワードで保護されたSQLite DBを作成する方法についてもわかりません。暗号化されたdbとパスワード保護されたdbの違いは何ですか?

+0

あなたは 'dbCon.SetPassword(myLitePW)'を使ってDBを暗号化します。その後、接続文字列でPWを使います: 'Data Source = c:\ mydb.db; Version = 3; Password = myLitePW;' – Plutonix

+1

これはEF6(System.Data.SQLiteパッケージ内)で動作します。しかし、EFコア(Microsoft.Data.SQLiteパッケージ内)では、そうする方法が見つからない...(Microsoft.Data.SQLiteのSQLiteConnectionにSetPasswordメソッドがない) – fharreau

答えて

4

このarticleとこのissueによれば、Microsoft.Data.Sqliteアセンブリ(EF Coreで使用)を使用してデータベースを暗号化する方法はありません。これに基づき

が、ここで私はそれが EF Coreでの作業を取得するために行われてきたものである:あなたのdbContextを設定している間

  • プロジェクト
  • System.Data.SQLite.Coreパッケージを追加、optionsBuilderあなた自身DbConnectionを与えます:

    var conn = new SQLiteConnection(@"Data Source=yourSQLite.db;"); 
    conn.Open(); 
    
    var command = conn.CreateCommand(); 
    command.CommandText = "PRAGMA key = password;"; 
    command.ExecuteNonQuery(); 
    
    optionsBuilder.UseSqlite(conn); 
    

それは非常に重要ですSystem.Data.SQLite.CoreアセンブリからSqliteConnectionMicrosoft.Data.Sqlite)ではなくSQLiteConnection(暗号化されたデータベースを管理できる)を使用するようにしてください。


記事によると、あなたはおそらく暗号化されたデータベースを扱う別の1(あなたがこのrepoの空きものを見つけることができます)によってMicrosoft.Data.Sqliteアセンブリ内に出荷さsqlite3.dllを交換することによりSqliteConnectionに建てを使用できます。しかし、私はそれをテストしなかった。

Hereこれを行う方法です!

+1

これを使用すると私はSystem.ObjectDisposedExceptionを持っています: '配置されたオブジェクトにアクセスすることはできません。' –

+0

あなたのコードの中には、あなたのオブジェクトの一つで 'Dispose()'を呼び出さなければなりません。どこでも 'using'節を使っていますか? using節を終了すると、それと共に定義されたオブジェクトは自動的に破棄されます。 – fharreau

+0

あなたのお返事ありがとう、私はどのように節の作品を使用して、問題は私が間違った場所であなたの答えを使用して完全に正しいことを知っています –

関連する問題