Sur chaque page de mon site Web, un jeton est transmis en tant que paramètre de chaîne de requête. Le code côté serveur vérifie si le jeton existe déjà dans la base de données. (Le jeton est un champ uniqueidentifider dans la base de données). Si le jeton existe, il utilisera celui existant, sinon il créera une nouvelle ligne avec le nouveau jeton.Enregistrements en double de la base de données du site Web
Le problème est de temps en temps, je vois un enregistrement en double dans la base de données (deux lignes avec le même identifiant unique). J'ai remarqué que les temps d'insertion des enregistrements étaient d'environ une demi-seconde. Ma seule supposition est quand le site est visité pour la première fois les pages aspx n'ont pas été entièrement compilées. Cela prend donc quelques secondes et l'utilisateur va sur une autre page du site en tapant une URL différente et les deux requêtes ont été exécutées presque en même temps.
Existe-t-il un moyen d'empêcher ce problème d'enregistrement en double? (côté serveur ou dans la base de données ?? ...)
Ceci est le code en question qui fait partie de chaque page du site.
var record = (from x in db.Items
where x.Token == token
select x).FirstOrDefault();
if (record == null)
{
var x = new Item();
x.Id = Guid.NewGuid();
x.Token = token;
db.Items.InsertOnSubmit(x)
db.SubmitChanges;
}