ADO.NET - Silverlight 4 - MVVM
Bonsoir à tous,
Je fais encore appel à vous car là je cale....
Voilà 1 mois que je suis rentré dans le monde .Net, plus particulièrement dans Silverlight... et j'avoue que je suis un peu perdu.
Je dois concevoir une grosse application Silverlight qui doit se connecter à une base de données SQL SERVER 2008. Je travaille actuellement avec Visual Studio 2010. Voilà pour le contexte.
Problème:
J'ai actuellement une base de donnée avec trois tables (on simplifie le problème à son maximum, histoire d'avoir une solution...)
Une table Projet qui contient:
int ID;
string nomProjet;
Une table Technologie:
int ID;
string Libelle;
Une table Projet_has_Technologies:
int ID_Projet;
int ID_Technology;
Voilà pour ce qui est de la BDD. J'arrive à faire mon .edmx (Elément ADO.NET Entity Data Model) sans problème, avec ma liaison n-n entre Technologie et Projet (table Projet_has_Technologies)
Coté Silverlight, j'aimerais avoir une pop-up qui s'ouvre lors du clic sur un bouton "Ajouter Projet" (jusque là, pas de soucis, la childWindow fonctionne) mais qui mette dans une comboBox la liste des technologies de ma base de données.
Là je coince... car j'aimerais faire ça proprement. J'ai fait une tentative qui fonctionne, mais qui est vraiment effrayante que voici:
Un WebService qui contient la méthode suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11
| [WebMethod]
public List<string> GetTechnologie()
{
List<string> LT = new List<string>();
foreach (Technology t in (from _t in ssr.Technology select _t))
{
LT.Add(t.Libelle);
}
return LT;
} |
Mon WebService est Référencé dans Silverlight et j'appelle la méthode de cette manière (Reactive code):
Code:
1 2 3 4 5 6 7 8
| IObservable<IEvent<GetTechnologieCompletedEventArgs>> observable = Observable.FromEvent<GetTechnologieCompletedEventArgs>(client, "GetTechnologieCompleted").Take(1);
IDisposable d = null;
d = observable.Subscribe(u =>
{
AR.technologiesACB.ItemsSource = u.EventArgs.Result;
d.Dispose();
});
client.GetTechnologieAsync(); |
Donc mes questions sont les suivantes:
Y a-t-il un moyen plus propre de faire cela ?
Prenons le cas où je veuille éditer un projet, comment récupérer les technologies du projet sans faire une cascade d'appel Asynchrone comme celui ci-dessus ? Par exemple récupérer un objet qui contient toutes les informations du projet y compris ses technologies.
Le code doit-il être coté client ou serveur?
J'avoue avoir du mal à architecturer proprement mon application, notamment pour ce qui est de la récupération de données... dois-je refaire des Entity coté client ou utiliser le mapping fait par l'ajout du WebService ?
Je viens du monde Flex et Java, et je dois avouer que la logique .net n'est pas facile en première approche :)
J'ai eu l'habitude d'Hibernate qui faisait cela très bien sans avoir à se préoccupé des classes métiers...
Tout comme pour la logique asynchrone, l'abonnement Flex est plus simple avec les Dispatch et addListener...
Si je n'ai pas été assez clair, je pourrais vous éclaircir les points obscurs !
Merci d'avance !