Antoine Griffard
LINQRoleProvider
L'objectif de cet article est d'implémenter un fournisseur de rôles ASP.NET personnalisé à l'aide de LINQ To Sql tout en faisant un tour d'horizons de la syntaxe des requêtes LINQ.
Par Antoine Griffard publié le 13/04/2008 à 22:18, lu 4379 fois, 8 pages
 5 | Requêtes LINQ
Afin de nous faciliter l'écriture des fonctions à implémenter, nous allons utiliser des requêtes LINQ.

Nous allons pour cela utiliser ce qu'on appelle des compiledQueries afin d'avoir à disposition des requêtes LINQ dont l'arbre d'expression est récupéré la première fois qu'elles sont exécutées puis mis en mémoire, ce qui apportera de meilleures performances.
La fonction GetApplicationId nous sera par exemple utile pour récupérer l'ApplicationId correspondant à un applicationName :

Public Shared Function GetApplicationId(ByVal dc As ProvidersDataContext, ByVal applicationName As String) As Guid

        Dim cq = CompiledQuery.Compile(Of ProvidersDataContext, String, IQueryable(Of Guid))( _

                Function(pdc As ProvidersDataContext, appName As String) _

                From a As Application In pdc.Applications _

                Where a.ApplicationName = appName _

                Select a.ApplicationId)

 

        Dim appId As Guid = cq.Invoke(dc, applicationName).SingleOrDefault

        If Not appId = Guid.Empty Then

            'Si l'ApplicationId existe

            Return appId

        Else

            'Sinon, on créé un nouvel enregistrement et on renvoie le guid inséré

            Dim a As New Application

            a.ApplicationName = applicationName

            a.LoweredApplicationName = applicationName.ToLower

 

            dc.Applications.InsertOnSubmit(a)

            dc.SubmitChanges()

            Return a.ApplicationId

        End If

    End Function

Pour récupérer les rôles de l'application, nous allons mettre à disposition une méthode GetRoles qui renverra un pointeur vers une fonction qui prendra en paramètre le DataContext et l'applicationName et qui renverra un objet IQueryable. Cela permet d'illustrer la syntaxe d'une jointure entre la table des rôles et celle des applications.

Public Shared Function GetRoles() _

        As Func(Of ProvidersDataContext, String, IQueryable(Of String))

 

        Return CompiledQuery.Compile(Of ProvidersDataContext, String, IQueryable(Of String))( _

                Function(dc As ProvidersDataContext, applicationName As String) _

                From r As Role In dc.Roles _

                Join a As Application In dc.Applications On a.ApplicationId Equals r.ApplicationId _

                Where a.ApplicationName = applicationName _

                Select r.RoleName)

    End Function

 
» Démarrer une discussion
 
Discussion démarée par malbaladejo le 16/05/2008 à 10:33, 4 commentaire(s).