2009-06-03 9 views
0

J'utilise la version 2.1 de SubSonic. J'essaye de construire pour construire une requête relativement simple où j'obtiens une liste de rôles pour un utilisateur using UserId en tant que paramètre. (UserId est une chaîne ...)SubSonic.SqlQuery généré de manière incorrecte lors de l'utilisation Where()

SubSonic.SqlQuery sel = new SubSonic.Select().From(Data.Tables.Role).InnerJoin(Data.Tables.UserRole, Data.UserRole.Columns.RoleId, Data.Tables.Role, Data.Role.Columns.Id).InnerJoin(Data.Tables.User, Data.User.Columns.Id, Data.Tables.UserRole, Data.UserRole.Columns.UserId).Where("[dbo].[User].[Id]").IsEqualTo(userId); 

Ceci génère la requête

SELECT [DBO]. [Rôle]. [Id], [DBO]. [Rôle]. [PID], [ dbo]. [Rôle]. [Nom] DE [dbo]. [Rôle] INNER JOIN [dbo]. [UserRole] ON [dbo]. [Rôle]. [Id] = [dbo]. [UserRole]. [RoleId] INNER JOIN [dbo]. [Utilisateur] ON [dbo]. [UserRole]. [UserId] = [dbo]. [Utilisateur]. [Id] OERE [dbo]. [Utilisateur]. [Id] = @ [dbo]. [Utilisateur]. [Id] 0

qui échoue. Si je remplace le Where avec .Where (Data.User.Columns.Id) cela génère la requête

SELECT [dbo]. [Rôle]. [Id], [dbo]. [Rôle]. [PID], [dbo]. [Rôle]. [Nom] DE [dbo]. [Rôle] INNER JOIN [dbo]. [UserRole] ON [dbo]. [Rôle]. [Id] = [dbo]. [UserRole] [RoleId] INNER JOIN [dbo]. [Utilisateur] ON [dbo]. [UserRole]. [UserId] = [dbo]. [Utilisateur]. [Id] OERE [dbo]. [Rôle]. [Id] ] = @ Id0

qui utilise la table Role dans la clause Where au lieu de la table User.

Est-ce un bug ou est-ce que je fais quelque chose de mal? Quelle serait la bonne façon de faire cela? Merci.

Répondre

1

Ceci est corrigé dans la version 2.2 - Je suggère de mettre à jour.

+0

Merci Rob. Cela l'a réparé. Il n'essaie plus de lancer mon identifiant de chaîne à un int. (J'ai juste commencé avec SubSonic il y a quelques jours, donc je me sens toujours comme un noob.) ps: Je viens de commander votre livre MVC sur Amazon il y a quelques jours. Je ne peux pas attendre pour l'obtenir! /flatterie – Antoine

Questions connexes