2009-06-24 8 views
0

J'ai une table Pages, j'ai une table PagesRoles avec PageId, RoleID qui lie à la table ASP.Net Membership Roles et la table Pages.Créer une clé étrangère pour les rôles ASP.Net table

Je souhaite renvoyer une page qui renvoie vers les rôles de l'utilisateur actuellement connecté.

L'utilisateur peut avoir plus d'un rôle. Une page peut avoir plus d'un rôle contre elle.

J'ai une classe Page qui a une propriété de clé étrangère de IQueryable. PageRoles a un IQueryable à ASPNet table Rôles (IQueryable) et IQueryable

Merci

EDIT:

En utilisant la réponse d'Adam pour obtenir toutes les pages qui ont un rôle qui lui est attribué qui correspond à l'un des cours connecté dans les rôles de l'utilisateur J'ai un problème supplémentaire. J'ai une table Menu qui a une clé étrangère PageID et un CategoryID.

Je voudrais retourner tous les éléments de menu avec un CategoryID de 4. Pour ceux qui ont un PageID je dois m'assurer que l'utilisateur est autorisé à voir cette page en fonction de son rôle. Je pense que la requête d'Adam ferait cela. Donc je pense que ce dont j'ai besoin est un UNION, retourner tous les éléments du menu où PageID est nul et CategoryID est 4 et retourner tous les éléments du menu où CategoryID est 4 et rejoindre le Page-> PageRole-> ASPNetRole où les rôles des utilisateurs actuels sont dans ASPNetRole résultats.

Répondre

0

Si vous utilisez SubSonic 3 une requête comme suit devrait fonctionner:

var pagesForUser = from pages in Pages.All() 
    join pagesRoles in PagesRoles.All() on pages.Id equals pagesRoles.PageID 
    join roles in Roles.All() on pagesRoles.RoleId equals roles.Id 
    where User.GetRoles().Contains(roles.Name) 
    select pages; 
+0

Cest Brill, merci. Je me bats vraiment avec les choses LINQ et la syntaxe correcte à utiliser pour Subsonic mais c'est un problème différent. J'ai un problème supplémentaire que j'aurais dû mentionner. J'ai une table de menu qui a une colonne PageID. Tous les éléments de menu n'ont pas un PageID, mais pour ceux qui le font, j'ai besoin de faire votre requête mais je voudrais la combiner pour que je puisse tout sélectionner dans le menu où pageid est nul ou votre requête. J'ai décrit le problème ici - http://stackoverflow.com/questions/1038309/reengineer-sql-into-subsonic-linq si cela aide. J'espère que vous voyez ce que je veux dire. Merci encore – Jon

+0

Pas de problème, je vais jeter un oeil à l'autre question. Si vous voulez vous mettre au courant de linq, je vous suggère d'obtenir une copie de la référence de poche O'Reilly, c'est un super petit livre. –

+0

Merci. J'espère que vous comprenez ce que j'essaie de faire. J'ai modifié mon modèle depuis que la question a été posée et remplacer la colonne Rôles par une table Many to Many PagesRoles. Peut-être obtenir ce livre, c'est juste que je suis confus avec faire des choses comme des jointures en C#, mais vous avez une propriété clé dans la classe subsonique, donc je pensais que je devais utiliser cela. – Jon

Questions connexes