Реализация 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();