SubSonic 3 Repository - SQLite In-Memory - PullRequest
       16

SubSonic 3 Repository - SQLite In-Memory

0 голосов
/ 01 декабря 2009

Прежде чем тратить время на изменение источника SubSonic 3, я решил спросить, не упустил ли я что-то простое.

Можно ли использовать хранилище SubSonic 3 с миграциями в базе данных SQLite In-Memory? Я не смог найти способ заставить DbDataProvider держать соединение открытым, чтобы база данных SQLite в памяти не исчезала при закрытии соединения.

Модульный тест со строкой подключения, которую я пробовал, это ...

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

Я попытался установить «Shared Connection» на IDataProvider, но соединение все еще закрывалось.

Если нет, я обновлю источник SubSonic и отправлю изменения.

Спасибо!

1 Ответ

2 голосов
/ 01 декабря 2009

Интересно - нет, я никак не могу придумать, как это сделать, кроме создания статического IDataProvider, но даже тогда мы закрываем соединение для таких вещей, как выполнение скаляров и т. Д.

Я полагаю, что вы могли бы создать такую ​​вещь, реализовав IDataProvider, а затем настроив все, что вам нужно - все выполнение проходит через это. Но это заставляет меня задаться вопросом, если мы явно отключим все в вызывающем коде - что было бы плохим дизайном с моей стороны ... хммм. \

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

...