我正在尝试使用JSON序列化和在内存模式下运行的Sqlite来单元测试EventStore持久性。在EventStore初始化期间,我收到“No such table:Commits”异常。我假设这是因为EventStore以某种方式关闭连接并打开一个新连接,导致它看到一个新的内存中的Sqlite实例(没有Commits表)。有没有办法让这项工作?
答案 0 :(得分:2)
SQLite实现很有趣,特别是当您使用“:memory:”连接字符串时。围绕实施的验收测试取决于数据库不会在操作之间“消失”。
EventStore的基本设计将每个离散动作分离为一个单独的操作:
您遇到的问题是每次针对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();