0 votes

Aide au débogage SQL/LINQ

Je rencontre des problèmes avec la déclaration suivante, qui renvoie l'erreur "La séquence ne contient aucun élément":

var vUser = (from u in this.dcLAUNCHOnline.aspnet_Users
                             where u.UserName.Equals(this.wCreateUser.UserName)
                             select u).Single();

Le SQL généré:

SELECT [t0].[ApplicationId],
 [t0].[UserId],
 [t0].[UserName],
 [t0].[LoweredUserName],
 [t0].[MobileAlias],
 [t0].[IsAnonymous],
 [t0].[LastActivityDate],
 [t0].[FirstName],
 [t0].[LastName],
 [t0].[Address_Street],
 [t0].[Address_City],
 [t0].[Address_Province],
 [t0].[Address_Country],
 [t0].[Address_PostalCode],
 [t0].[Telephone_Main_AreaCode],
 [t0].[Telephone_Main_Prefix],
 [t0].[Telephone_Main_LineNumber],
 [t0].[Telephone_Main_Extension],
 [t0].[Telephone_Mobile_AreaCode],
 [t0].[Telephone_Mobile_Prefix],
 [t0].[Telephone_Mobile_LineNumber],
 [t0].[Telephone_Mobile_Extension],
 [t0].[Telephone_Other_AreaCode],
 [t0].[Telephone_Other_Prefix],
 [t0].[Telephone_Other_LineNumber],
 [t0].[Telephone_Other_Extension],
 [t0].[Gender],
 [t0].[BirthDate]
FROM [dbo].[aspnet_Users] AS [t0]
WHERE [t0].[UserName] = @p0
-- @p0: Input NVarChar (Size = 20; Prec = 0; Scale = 0) [six.string@gmail.com]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918

Lorsqu'exécuté dans SQL Server Management Studio, le script renvoie effectivement la ligne attendue (qui se trouve dans la table)

J'ai défini p0 avec cette ligne:

DECLARE @p0 NVarChar(20) = 'six.string@gmail.com'

Des idées sur pourquoi cela échoue? Merci!

3voto

Johannes Rudolph Points 19845

.Single() échoue toujours si la collection sur laquelle il est appelé est vide ou contient plus d'un élément. SQL Server ne renvoie aucune ligne, ce qui doit être le cas ici.

Vous pourriez utiliser soit .FirstOrDefault() ou .SingleOrDefault() et vérifier la valeur de retour par rapport à null, en fonction de si vous vous attendez à ce qu'un seul élément soit retourné par votre requête.

Par exemple, si vous avez une contrainte d'unicité sur la ligne "UserName" sur laquelle vous filtrez, vous devriez utiliser .SingleOrDefault(). Si null est retourné, aucune ligne n'a été trouvée. Plusieurs lignes ne seront jamais retournées.

1voto

CMS Points 315406

L'InvalidOperationException que vous obtenez est lancée uniquement lorsque la requête n'a donné aucun résultat.

La seule chose qui me vient à l'esprit, (vu que vous dites être sûr que la ligne existe dans la base de données), est que vous êtes peut-être connecté à une autre base de données.

Vérifiez la chaîne de connexion de votre DataContext et assurez-vous que vous interrogez la même base de données que dans Management Studio.

Édition: Au fait, vous interrogez directement la table aspnet_Users du SqlMembershipProvider, pour trouver des utilisateurs par UserName, vous voudrez peut-être jeter un œil à la méthode Membership.FindUsersByName.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X