Проблема возникает из-за того, что предыдущее соединение все еще имеет доступ к файлу.
Как уже упоминалось в приведенном ниже потоке, реализация Cqlite в C # имеет причуду, когда после .Close () соединение не очищается до тех пор, покасборщик мусора запускается
System.Data.SQLite Close () не освобождает файл базы данных
Чтобы исправить это, вы можете добавить IDisposable в ваш IAggregateDataRepository и реализовать нечто подобное, напримерследующий метод удаления:
public void Dispose()
{
_database.Dispose();
GC.Collect();
GC.WaitForPendingFinalizers();
}
Вам нужно будет вызвать диспозиторов в ваших тестах, это можно сделать, добавив следующее в начало вашего метода TearDown:
if (_aggregateDataRepository != null)
{
_aggregateDataRepository.Dispose();
}
КакДополнительный совет, если вы добавите эту строку в конец конструктора контекста приложения, это обеспечит вам постоянный доступ в режим «Write Ahead Log», который больше подходит для нескольких соединений.Это не нужно для устранения проблемы, но, поскольку вы собираетесь создать интерфейс успокоительного веб-API на sqlite, он поможет при одновременных вызовах.
Database.ExecuteSqlCommand("PRAGMA journal_mode=WAL;");
Дополнительные сведения https://www.sqlite.org/wal.html