2010-11-23 5 views
0

Je suis tombé sur un problème très étrange qui ne m'est jamais arrivé auparavant.Problème de récupération de données LINQ simultané

Dans le code de connexion:

var sqlLogin = db.LoginRetrieve(loginID, archived).SingleOrDefault(); 

// (db est le contexte de données LINQ)

--problem:

Si deux utilisateurs se connectent en même temps, cette ligne de Le code lancera une exception qui est "La colonne 'UserLoginID' requise n'existe pas dans les résultats." Mais si un seul utilisateur se connecte ou deux utilisateurs ne cliquent pas sur le bouton en même temps, il n'aura aucune exception.

Est-ce que quelqu'un peut partager quelques lumières à ce sujet? Merci d'avance.

Han

Répondre

1

Je soupçonne que votre DataContext est partagée entre les demandes.

Ne faites pas cela.

Vous devez créer un DataContext distinct pour chaque requête.
Sinon, vous aurez des problèmes de threads désagréables comme celui-ci. (DataContext est thread-safe)


En général, vous devriez être très prudent lors du partage d'objets entre les demandes (par exemple, static s ou état d'application/session).
Sauf indication contraire expresse, vous devez supposer que l'objet n'est pas adapté aux threads et ne peut pas être partagé.

Questions connexes