内存中的NEventStore和Sqlite



我正在尝试使用JSON序列化和在内存模式下运行的Sqlite对EventStore持久性进行单元测试。在EventStore初始化期间,我得到一个"没有这样的表:提交"异常。我假设这是因为EventStore以某种方式关闭了连接并打开了一个新的连接,导致它看到一个新的内存中的Sqlite实例(没有提交表)。有什么办法能解决这个问题吗?

SQLite的实现很有趣,特别是当您使用":memory:"连接字符串时。围绕实现的验收测试取决于数据库不会在操作之间"消失"。

EventStore的基本设计将每个离散的操作分离为一个单独的操作,其:

  1. 根据配置,在ambient TransactionScope(如果有的话)中列出
  2. 打开连接
  3. 构建idb命令
  4. 执行idb命令
  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;

添加以下内容作为"Establish context"的第一行:

scope = ConfigurationConnectionFactory.OpenScope("SQLite");

最后,"Cleanup everything"的最后一行应该是:

scope.Dispose();

相关内容

  • 没有找到相关文章

最新更新