Репозиторий SubSonic 3 - SQLite В памяти
-
11-09-2019 - |
Вопрос
Прежде чем я потрачу время на модификацию источника SubSonic 3, я решил спросить, не упускаю ли я чего-то простого.
Можно ли использовать репозиторий SubSonic 3 с миграциями в базе данных SQLite в памяти?Я не смог найти способ заставить DbDataProvider поддерживать соединение открытым, чтобы база данных SQLite в памяти не исчезала при закрытии соединения get.
Модульный тест со строкой подключения, который я пробовал, это...
public class SQLite_InMemory_SimpleRepositoryTests
{
public class Job
{
public Guid JobId { get; set; }
public string JobName { get; set; }
}
[Fact]
public void SQLite_InMemory_SimpleRepo_CanStayOpen()
{
IDataProvider provider = ProviderFactory.GetProvider("Data Source=:memory:;Version=3;New=True;Pooling=True;Max Pool Size=1;", "System.Data.SQLite");
IRepository repository = new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
for (int i = 0; i < 10000; i++)
{
var job = new Job {JobId = Guid.NewGuid(), JobName = "Job_"+i};
repository.Add(job);
}
}
}
Я попытался установить "Общее соединение" в IDataProvider, но соединение, похоже, все еще закрывалось.
Если нет, я обновлю дозвуковой источник и отправлю изменения.
Спасибо!
Решение
Интересно - нет, я не могу придумать другого способа сделать это, кроме, возможно, создания статического IDataProvider, но даже тогда мы закрываем соединение для выполнения таких вещей, как выполнение scalar и т.д.
Я полагаю, вы могли бы создать такую вещь, внедрив IDataProvider, а затем настроив все так, как вам нужно - все выполнение проходит через него.Но это заставляет меня задуматься, не отключаем ли мы что-то явно в вызывающем коде - что было бы плохим дизайном с моей стороны...хммм.\
Хотелось бы иметь эту функцию...