J'ai une table qui contient le numéro de séquence.Ce verrouillage est-il correct?
Structure de la table
SequenceGenerator
Year int
Month int
NextNumber int
Année + mois font clé primaire. La séquence est réinitialisée tous les mois. J'utilise Subsonic pour générer DAL. Pour obtenir le numéro de séquence suivant j'ai écrit une classe qui retourne le numéro suivant pour les demandeurs:
private static readonly object _lock = new Object();
private static readonly string FormatString = "{0}{1}{2}{3}";
private static readonly string NumberFormat = "000000";
public static object GetNextNumber(string prefix)
{
lock (_lock)
{
int yr = DateTime.Now.Year;
int month = DateTime.Now.Month;
SequenceGeneratorCollection col = new SequenceGeneratorCollection()
.Where(SequenceGenerator.Columns.Year, Comparison.Equals, yr)
.Where(SequenceGenerator.Columns.Month, Comparison.Equals, month)
.Load();
if (col==null || col.Count == 0)
{
SequenceGenerator tr = new SequenceGenerator();
tr.Year = yr;
tr.Month = month;
tr. NextNumber = 1;
tr.Save();
return string.Format(FormatString, prefix, yr,
month,tr.NextNumber.ToString(NumberFormat));
}
SequenceGenerator t = col[0];
t.NextNumber += 1;
t.Save();
return string.Format(FormatString, prefix, yr, month,
t.NextNumber.ToString(NumberFormat));
}
}
Le code sera accessible par l'application web. Cela fera-t-il une différence? – TheVillageIdiot
Cela dépend de la façon dont votre serveur Web est configuré, il est possible de le faire engendrer plus d'un processus. Vous serez beaucoup mieux verrouillé au niveau de la base de données. –
merci votre commentaire l'a scellé. – TheVillageIdiot