2009-10-14 4 views
2

J'ai exploré SimpleRepository de Sub Sonic 3 et j'en suis plutôt content mais j'ai une question concernant les transactions. Je suis conscient que l'utilisation de méthodes telles que 'AddMany' et 'DeleteMany' effectuera automatiquement toutes ces opérations au sein d'une seule transaction, mais je me demande s'il est possible de forcer SimpleRepository à effectuer l'ajout ou la mise à jour de deux types d'objets différents transaction. Par exemple, disons que j'ai la notion de deux entités différentes mais liées dans mon application: un utilisateur et un profil. Chaque utilisateur doit avoir un profil et chaque profil appartient à un et un seul utilisateur. Quand un nouvel utilisateur s'inscrit avec mon application, je veux qu'il fournisse les informations de base de l'utilisateur (informations d'identification, nom, e-mail) mais aussi des informations de profil supplémentaires (sur moi, le sexe, le code postal, etc.) d aimer pouvoir effectuer l'ajout de l'objet utilisateur et de l'objet Profile au sein d'une seule transaction, mais comme il nécessite deux appels distincts à la méthode 'Add' avec des paramètres de type différents, je ne suis pas sûr de savoir comment le faire.SimpleRepository de SubSonic peut-il s'inscrire dans une transaction pour deux types d'objets différents?

Répondre

2

Vous pouvez le faire en utilisant une transaction comme suit:

using (TransactionScope transactionScope = new TransactionScope()) 
    { 
    using (SharedDbConnectionScope connectionScope = new SharedDbConnectionScope()) 
    { 
     // Add your user 
     // Add your profile 

     transactionScope.Complete(); 
    } 
    } 
+0

Merci pour la réponse. J'avais déjà essayé TransactionScope auparavant, mais j'ai eu des erreurs liées à DTS. Il me manquait définitivement SharedDbConnectionScope pour forcer le partage de connexion pour les deux appels d'accès aux données. Maintenant, je reçois une erreur dès que je quitte l'étendue de la connexion en utilisant le bloc. On dirait que la méthode Dispose pour SharedDbConnectionScope provoque des problèmes dans ce scénario. Passant à travers la source maintenant pour essayer de le suivre. –

1

adam - je pense que le code ci-dessus est correct, mais est en fait dans le mauvais sens, il devrait être:

using (SharedDbConnectionScope connectionScope = new SharedDbConnectionScope()) 
    { 
    using (TransactionScope transactionScope = new TransactionScope()) 
    { 
     // Add your user 
     // Add your profile 

     transactionScope.Complete(); 
    } 
    } 

acclamations jimi

+0

Merci pour la réponse, je vais essayer cela plus tard. –

Questions connexes