3

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

4

1 回答 1

3

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

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

最后,“清理一切”中的最后一行应该是:

scope.Dispose();
于 2011-10-28T11:42:37.700 回答