gpt4 book ai didi

cqrs - 内存中的 NEventStore 和 Sqlite

转载 作者:行者123 更新时间:2023-12-04 14:41:42 25 4
gpt4 key购买 nike

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

最佳答案

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

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

scope.Dispose();

关于cqrs - 内存中的 NEventStore 和 Sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com