2009-12-01 3 views
0

Avant d'investir du temps dans la modification de la source SubSonic 3, j'ai pensé que je demandais s'il me manquait quelque chose de simple.Référentiel SubSonic 3 - SQLite In-Memory

Est-il possible d'utiliser le référentiel SubSonic 3 avec des migrations sur une base de données SQLite In-Memory? Je ne pouvais pas trouver un moyen de forcer le DbDataProvider à garder la connexion ouverte afin que la base de données In-Memory SQLite ne disparaisse pas lorsque la connexion est fermée.

Le test unitaire avec la chaîne de connexion je tentais est ...

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

J'ai essayé le réglage de la « connexion partagée » sur le IDataProvider, mais la connexion semblait encore fermer.

Sinon, je mettrai à jour la source SubSonic et soumettrai les changements.

Merci!

Répondre

2

Intéressant - non il n'y a aucun moyen que je peux penser à faire cet autre que de créer peut-être un IDataProvider statique mais même alors nous fermer la connexion pour faire des choses comme l'exécution etc. du scalaire

I spose vous pouvez créer une telle chose en implémentant IDataProvider puis en configurant les choses selon vos besoins - toute l'exécution passe par là. Mais cela me fait me demande si nous fermons explicitement les choses dans le code d'appel - ce qui serait une mauvaise conception de ma part ... hmmm \

aimerait avoir cette fonctionnalité ...

+0

Salut Rob,. Merci pour l'info. J'ai fait une trace sur l'exécution et appelle Close et Dispose dans quelques endroits. J'allais implémenter une méthode d'extension sur le IDataProvider appelée bool IsSqlLiteMemoryDb() qui vérifierait le type de connexion et: memory: dans la chaîne de connexion et remplacerait les disposes/se ferme. Où devrait-on poster le code? –

+0

Aussi, juste pour noter, j'ai été en mesure d'obtenir le test à passer, mais «hackishly». Je vais refactoriser le code et le poster. Faites-moi juste savoir où. Merci. –

+0

Je présume ici ?: http://github.com/subsonic/SubSonic-3.0 – Mike