Silverlight, Entity Framework et relations n-n ?

yo1gbec Messages postés 3 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 29 mai 2010 - 29 mai 2010 à 21:55
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 1 juin 2010 à 11:58
Bonjour à tous.

Recemment j'ai déjà ouvert un topic sur le fonctionnement de Silverlight, EF, et LINQ to entities sur un autre forum d'entraide celebre.

Pour ceux que celà interresse voici le lien : http://www.developpez.net/forums/d92...-mode-demploi/

Maintenant j'ai un autre problème, et de taille !
Voici toute l'explication step by step.

Tout d'abord je créé mon Entity Data Model.
Il est très simple, j'ai une entité employee, qui possède plusieurs attributs dont une collection de permissions.
De la même manière, mon entité permission peut posseder une collection d'employee.
Jusque là c'est donc une relation n-n ce qu'il y a de plus classique, à la différence qu'EF s'occupe comme un grand de la création de la table intermédiaire EmployeePermission à notre place et en arrière plan.

Une fois mon modèle conceptuel terminé je clique droit sur mon designer et fais "generate database from model".

J'execute le script SQL de DDL que EF me genere.

Si je vais dans mon SQL serveur 2008 et que je genere un diagramme de ma DB fraichement crée, le résultat est identique à ce à quoi je m'attendait, c'est à dire 3 tables.
Jusque là pas de problème.

N'oublions pas que nous sommes en Silverlight, et que si coté client je veux pouvoir exploiter les classes que EF m'a gentiment crée je dois les exposer depuis le serveur au travers de quelque chose, et ce quelque chose dans mon cas est une classe "Domain Service", que j'appelle DomainService1.

Maintenant c'est là que mes problèmes commencent.
Coté client j'ai crée une classe censé scanner l'ensembles des permissions que possede mon employee, sur base de son Id.

Je n'oublie pas mon using vers le serveur.
J'instancie ma classe DomainService1, et j'appelle cette instance _context.
Comme je sais que par défault Silverlight ne charge pas toute ma DB en mémoire (et heureusement), je sais que je dois charger manuellement dans mon context les d'entity sets dont j'ai besoin, c'est à dire Employee et Permission, à l'aide de la methode load.

Ensuite j'écris ma petite requete LINQ to entities qui va bien, et qui est censée me récuperer un seul et unique employee, sur base de son Id.

Et là, ô malheur, ô desespoir, à moins que l'intellisense de VS ne me joue des tours je n'ai pas accés à la collection de permissions tant esperée de mon employee !!!

Alors là je me dit ou ai'je manqué une étape ? Ou est l'astuce ? Comment faire pour charger les relations entre mon employee et les permissions qui lui sont liées (en DB) ???

Messieurs si vous avez la réponse c'est avec plaisir, sur ce coup là je donne ma langue au chat, pourtant c'est pas faute d'avoir cherché !

Merci d'avance.

2 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
31 mai 2010 à 08:34
Salut,
Comment s'appelle la méthode côté server? Elle doit, sauf erreur, avoir la forme suivante: GetXXX sinon elle est pas disponible sur le client.

Quant au type de retour, je ne me rappelle plus par coeur, c'est possible que tu doives retourner un IQueryable<T> plutôt que directement T, ce qui ne change pas grand chose de toute façon, mais tu peux également voir pour essayer ça si tu n'as toujours pas accès côté client...


[hr]
-Site personnel-
-Blog-
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
1 juin 2010 à 11:58
Pas sûr finalement que j'aie répondu juste...
Ce que tu peux faire pour charger l'entity, c'est rajouter un Include côté server:

myContext.Employees.Include("Permissions").Where(....);

Je ne sais pas si ça répond mieux?

[hr]
-Site personnel-
-Blog-
0
Rejoignez-nous