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