Bonjour à vous,
J'ai un petit(Gros) problème avec ma requête LINQ et EntityFramework.

J'ai dans le relation principale 3 table :
  • Schedule (qui est le noeud de toutes les relations)
  • Group (la liste des groupes)
  • Group_To_GroupOption (ma table de relation pour qu'une option puisse avoir plusieurs parents)


Nom : Schema.png
Affichages : 173
Taille : 6,8 Ko


Dans ma classe entité Schedule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
        Public Sub New()
            Me.Parents = New List(Of Schedule)
            Me.Options = New List(Of Schedule)
        End Sub
      {...}
        Public Overridable Property Parents As ICollection(Of Schedule)
        Public Overridable Property Options As ICollection(Of Schedule)
 
    Public Function GetGroupOptions() As IEnumerable(Of Group)
            If Options IsNot Nothing Then
                Return Options.Select(Function(f) f.Group)
            End If
            Return Nothing
        End Function
Pour le mapping de Schedule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
           Me.HasMany(Function(t) t.Options).
                WithMany(Function(t) t.Parents).
                Map(Sub(m)
                        m.ToTable("act_Group_To_GroupOption")
                        m.MapLeftKey("parent_id") 
                        m.MapRightKey("groupOption_id")
                    End Sub)
Vu que s'est une relation Many-To-Many je n'ai pas créer de classe entité/mapping pour Group_To_GroupOption.

Si je regarde une entité unique dans LINQ tous passe sans problème.


Mon problème est pour ma requête principale qui obtient la liste des activité (oui je n'ai pas mis cette table, mais elle n'est pas la cause du problème). Dans cette classe entité, j'ai la liste de tous les groupes qui y sont attaché.
  1. Obtient la liste des activités
  2. Obtient la liste des groupes de activités (qui ne sont pas une options)
  3. Obtient la liste des options de chaque groupes (ici que ca plante)


Si je retire le code de la 3e étape. Tous passe niquel.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim activityList = (From a In Me.Activities.Include(Function(a) a.Group).Include(Function(a) a.ActivityType).Include(Function(a) a.Activityrestrictiondate)
							From ar In a.ActivityResources
							Where a.owner_organization_id = _OrganizationId
							Select New With {
								.ActivityLabel = If(String.IsNullOrEmpty(ar.Name), a.name, ar.Name),
								.ActivityId = a.id,
								.ActivityDescription = If(String.IsNullOrEmpty(ar.Description), a.description, ar.Description),
								.ActivityTypeId = a.ActivityType.id,
								.ParentActivityTypeId = If(a.ActivityType.act_type_id Is Nothing, a.ActivityType.id, a.ActivityType.act_type_id),
								.ActivityGroups = (From g In a.Group
												   From gr In g.GroupResources
												   From sr In g.Session.SessionResources
												   Let IsOption = (g.Schedule.Parents.Count > 0)
												   Where gr.Culture_id = CultureId And sr.Culture_id = CultureId And Not IsOption And g.publish = 1 And g.status = "lblactive"
												   Select New With {
													   .ActivityGroupId = g.schedule_id,
													   .GroupName = If(String.IsNullOrEmpty(gr.Name), g.name, gr.Name),
													   .GroupOptions = (From x In g.Schedule.GetGroupOptions
																		 Select New With {
																			 .ActivityId =  x.activity_id,
																			 .ActivityGroupId = x.schedule_id,
																			 .GroupName = x.name})
                                                                    })
                            }).ToList
J'obtiens l'erreur suivante :
LINQ to Entities ne reconnaît pas la méthode « System.Collections.Generic.IEnumerable`1[ACT.CommonToolkit.DataAccess.Models.Group] GetGroupOptions() », et cette dernière ne peut pas être traduite en expression de magasin.
J'ai essayé en mettant au lieu de la méthode GetGroupOption : g.Schedule.Options.Select(function(f) f.Group)

Dans ce cas, j'obtiens l'erreur suivante :
The column 'schedule_id3' was specified multiple times for 'Join8'.
The column 'schedule_id3' was specified multiple times for 'Filter6'.


Initialement, un groupe ne pouvait avoir qu'un parent. Donc, j'avais un champs (parent_id) dans le groupe. Mais ce dernier a été retiré.

Donc des experts parmi vous qui ont une solution magique a mon problème ? Disons qu'après 2 jours de recherche et d'essai erreur je commence a désespérer


Merci d'avance
P.S : Est-ce qu'avec ma structure j'aurai moyen de faire le mapping (Parent/Option) directement dans l'entité Group ?