2011-10-21 6 views
2

私は、JSONのシリアル化とinmemory-modeで動作するSqliteを使用して、EventStoreの永続性をテストしようとしています。 EventStoreの初期化中に「No such table:Commits」例外が発生します。これは、EventStoreが何らかの形で接続を閉じて新しいメモリを開くため、新しいメモリ内のSqliteインスタンス(sans Commitsテーブル)が表示されるためです。この仕事をする方法はありますか?イベントストアとSqliteインメモリ

答えて

2

特に、 ":memory:"接続文字列を使用している場合は、SQLiteの実装が面白いです。実装を取り巻く受入れテストは、操作の間に「消えていない」データベースに依存します。

EventStoreの基本的な設計は、別々の操作にそれぞれ別個のアクションを分離:

  1. は、構成に応じて、周囲のTransactionScope(もしあれば)
  2. に入隊する
  3. はビルド接続を開きIDbCommand
  4. はのIDbCommand
  5. 評価結果を実行
  6. は、接続(プールに戻ってそれを解放する)
  7. は(例外はスローされません)のTransactionScope
  8. はあなたに実行している問題があるのTransactionScope

を破棄を完了を破棄している各呼び出しに対してEventStoreは接続を開いて閉じます。

私は、同じIDbConnectionをプールに戻さずに明示的に使用することをサポートしたいので、これを回避する方法があります。 (リリース候補段階にある)EventStore v3.0では、同じ接続を利用して、接続が各操作の後に取り壊す回避するメソッド呼び出しがあります。

ConfigurationConnectionFactory.OpenScope("SQLite"); // SQLite = app.config connection key 

単に「using_the_persistence_engine」受け入れテストクラスにこれを追加し、あなたはすべてのセットです:

private static IDisposable scope; 

は、「コンテキストを確立」する最初の行としてこれを追加します。

最後に
scope = ConfigurationConnectionFactory.OpenScope("SQLite"); 

、「クリーンアップのすべて」の中にlastlineを次のようになります。

scope.Dispose(); 
+0

私はWeb APIの統合テストで同じ問題があります。あなたのソリューションは私のために働かせることはできません。例はこちら[ここ](http://www.filedropper.com/eventstoredisposedobjectissue)任意のアイデアですか? –

+0

@MartinNilssonは、SQLiteとテストランナーでx86/x64の問題と関係がありますか? –

+0

IQueryableとIEnumerableの問題があるようです。 [https://gist.github.com/3009467](https://gist.github.com/3009467) メモメソッド –