2010-09-10 2 views
2

Bonjour, nous construisons une solution de multi-location où chaque locataire aura sa propre base de données. Nous conserverons les informations sur le locataire dans une base de données d'index. Lors de la création d'un locataire, les étapes suivantes seront effectuées.Transaction lors de l'écriture dans la base de données et création d'une base de données

Créez la classe Tenant, enregistrez-la dans la base de données où elle recevra un nombre incrémentiel qui sera utilisé pour nommer la base de données que nous allons créer. Créez la base de données avec le numéro incrémental. Ensuite, mettez à jour le schéma de la base de données.

Ce n'est pas un problème du tout, le problème est de savoir si une partie de la seconde aux étages va lancer une exception. Ensuite, nous voulons annuler l'épargne du locataire. Pouvons-nous le faire dans une transaction plus importante. Pour pouvoir utiliser le numéro incrémental, nous sommes obligés de valider la transaction pour l'obtenir. Devrions-nous utiliser d'autres stratégies de dénomination?

idées?

+0

Utilisez-vous une colonne IDENTITY/auto-number dans le tableau pour obtenir le numéro? Vous pouvez utiliser la fonction SCOPE_IDENTITY() dans T-SQL pour obtenir la valeur d'identité du dernier enregistrement ajouté. INSÉREZ DANS X (a, b) VALEURS (x, y); SET @TenantID = SCOPE_IDENTITY(); –

Répondre

0

De MSDN:

L'instruction CREATE DATABASE doit fonctionner en mode autocommit (le mode de gestion des transactions par défaut) et ne sont pas autorisés dans une transaction explicite ou implicite.

(Cela vaut pour ALTER DATABASE aussi bien.)

Cependant, si votre logique d'application décide que l'opération tombe en panne (note: déplacer autant de cette vérification que vous pouvez aussi tôt dans la logique que vous can), vous pouvez simplement DROP DATABASE à la place (et annuler la transaction de base de données d'index), parce que la prochaine tentative devrait probablement recréer l'ensemble de toute façon. Ce n'est pas une solution idéale, mais vous devrez contourner la contrainte que j'ai citée ci-dessus.

Questions connexes