Вопрос

Прежде чем я потрачу время на модификацию источника 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, а затем настроив все так, как вам нужно - все выполнение проходит через него.Но это заставляет меня задуматься, не отключаем ли мы что-то явно в вызывающем коде - что было бы плохим дизайном с моей стороны...хммм.\

Хотелось бы иметь эту функцию...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top