2009-09-25 5 views
0

J'utilise Visual Studio 2008, C#, SQLite via System.Data.SQLite avec SubSonic 3. Mon application est arrivée à un état où je dois mettre à niveau le schéma de base de données (ajouter des colonnes, des triggers, etc) puis ajouter de nouveaux enregistrements via des objets ActiveRecord générés par SubSonic - le tout dans le cadre d'une seule transaction afin que les échecs puissent être bien annulés.Modification d'un schéma de base de données SQLite et de données via SubSonic 3 dans une transaction

Idéalement, c'est un peu ce que j'espérais faire:

Begin Transaction 
try 
    Update Schema to latest version 
    Use SubSonic objects to add new records/modify existing 
    Commit Transaction 
catch 
    Rollback Transaction 

Malheureusement, cela ne fonctionne pas. Tous les changements de schéma sont actuellement en cours via SubSonic.Query.CodingHorror, qui ne semble pas respecter les transactions. Existe-t-il un moyen d'effectuer à la fois des modifications de schéma et des modifications de données SubSonic dans le cadre d'une transaction unique?

Répondre

1

Je pense avoir trouvé la réponse à ma question: utiliser la même connexion à la base de données pour toutes les actions et utiliser la transaction sur cette connexion à une base de données. Comme je n'avais pas dit à SubSonic comment gérer toutes les connexions de base de données pour moi - il utilisait la méthode par défaut, une connexion par recherche ou un objet créé ou CodingHorror. Puisque les transactions ne peuvent pas couvrir les connexions à la base de données, le comportement que j'ai vu était entièrement attendu. Une fois que j'ai créé ma propre connexion à la base de données et effectué les recherches, les créations et les modifications du schéma CodingHorror, toutes les transactions commencent à fonctionner correctement.

Questions connexes