2009-06-03 7 views
0

Ich verwende Version 2.1 von SubSonic. Ich versuche zu bauen, um eine relativ einfache Abfrage zu erstellen, wo ich eine Liste von Rollen für einen Benutzer mit UserId als Parameter abrufen. (Benutzer-ID ist eine Zeichenfolge ...)SubSonic.SqlQuery falsch generiert, wenn Where() verwendet

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); 

dies erzeugt die Abfrage

SELECT [dbo]. [Rolle]. [Id], [dbo]. [Rolle]. [PID], [ dbo]. [Rolle]. [Name] FROM [dbo]. [Rolle] INNERER JOIN [dbo]. [UserRole] EIN [dbo]. [Rolle]. [Id] = [dbo]. [UserRole]. [RoleId] INNERER JOIN [dbo]. [Benutzer] ON [dbo]. [BenutzerRole]. [UserId] = [dbo]. [Benutzer]. [Id] WHERE [dbo]. [Benutzer]. [Id] = @ [dbo]. [Benutzer]. [Id] 0

was fehlschlägt. Wenn ich die Wo mit.Where (Data.User.Columns.Id) ersetze, erzeugt dies die Abfrage

SELECT [dbo]. [Rolle]. [Id], [dbo]. [Rolle]. [PID], [dbo]. [Rolle]. [Name] FROM [dbo]. [Rolle] INNERER JOIN [dbo]. [UserRole] ON [dbo]. [Rolle]. [Id] = [dbo]. [UserRole] . [RoleId] INNERER VERBAND [dbo]. [Benutzer] EIN [dbo]. [BenutzerRolle]. [BenutzerId] = [dbo]. [Benutzer]. [ID] WHERE [dbo]. [Rolle]. [Id ] = @ Id0

die die Role-Tabelle in der Where-Klausel anstelle der User-Tabelle verwendet.

Ist das ein Fehler, oder mache ich etwas falsch? Was wäre der richtige Weg, dies zu tun? Vielen Dank.

Antwort

1

Dies ist in Version 2.2 behoben - ich würde vorschlagen, zu aktualisieren.

+0

Dank Rob. Das hat es behoben. Es versucht nicht mehr, meine String-ID in einen int zu konvertieren. (Ich habe vor ein paar Tagen mit SubSonic begonnen, also fühle ich mich immer noch wie neu.) ps: Ich habe gerade vor einigen Tagen Ihr MVC-Buch bei Amazon bestellt. Ich kann es kaum erwarten, es zu bekommen! /Schmeichelei – Antoine

Verwandte Themen