2016-06-17 2 views
1

servicestackベースのWeb APIで単体テストを行うためにinMemoryデータベース(ServiceStack.OrmLite.Sqlite.Windowsを使用)を使用しています。私がテストしようとしている方法は次のとおりです。私は理由のIsolationLevelの次の例外を取得InmemoryDB接続を使用してこのメ​​ソッドをテストしようとしたInememory DB内でTransactionScope IsolationLevelをスナップショットに変更する

 public object Get(object request) 
       { 
        using (var db = HostContext.Resolve<IDbConnectionFactory>().OpenDbConnection("ConnectionString")) 
        {       
         using (var dbtran = db.OpenTransaction(IsolationLevel.Snapshot)) 
         { 
         // reading operation from DB 
         return response; 
         } 
        } 
       } 

。次のようにinmemoryDBを作成するとき私は、スナップショットする分離レベルを設定しようと

  An exception of type 'System.ArgumentException' occurred in System.Data.SQLite.dll but was not handled in user code 

 var isolationlevel = IsolationLevel.Snapshot; 
     db.OpenTransaction().IsolationLevel.Add(isolationlevel); 

もこれを実行した後、トランザクション・レベルとしてシリアライズ現れ、同じ例外を得ています。

inmemoryDBでトランザクションIsolationlevelをスナップショットに設定する方法はありますか?

答えて

2

SQLiteはIsolationLevel.Snapshotトランザクションの作成をサポートしていませんが、SQLite's Isolation and ConcurrencyドキュメントはWrite Ahead Logging(WAL)モードを実行することによって有効になっている「スナップショット分離」「PRAGMAのjournal_mode = WAL」あなたとOrmLiteに設定することができますSQLiteの展示を示しています

db.ExecuteSql("PRAGMA journal_mode=WAL"); 
+0

説明をありがとう。 – kgangadhar

関連する問題