我正在尝试使用 JSON 序列化和在内存模式下运行的 Sqlite 对 EventStore 持久性进行单元测试。我在 EventStore 初始化期间收到“没有这样的表:提交”异常。我假设这是因为 EventStore 以某种方式关闭连接并打开一个新连接,导致它看到一个新的内存中 Sqlite 实例(没有提交表)。有什么办法可以使这项工作?
问问题
1030 次
1 回答
3
SQLite 实现很有趣,尤其是当您使用“:memory:”连接字符串时。围绕实施的验收测试取决于数据库在操作之间不会“消失”。
EventStore 的基本设计将每个离散动作分离为一个单独的操作,该操作:
- 根据配置,加入环境 TransactionScope(如果有)
- 打开连接
- 构建 IDbCommand
- 执行 IDbCommand
- 评估结果
- 释放连接(将其释放回池)
- 完成 TransactionScope(当没有抛出异常时)
- 处理 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 回答