Nous sommes en train d'écrire une application WPF en utilisant le framework Entity (Silverlight avec les services RIA pour être précis). Nous utilisons un ObjectContext partagé à travers l'application pour que nous puissions bénéficier du partage de données entre les modules. Le problème est le suivant: si l'utilisateur ouvre son travail, disons les ventes historiques, il est chargé dans ObjectContext et y reste jusqu'à la fin de l'application. Donc, un autre modèle devrait être utilisé.Entity Framework ObjectContext dans l'application Windows/WPF/Silverlight
Je sais que ObjectContexts doit être utilisé comme unité de travail unique. Mais alors, comment laisser les autres parties de l'application savoir que quelque chose a changé et qu'ils devraient recharger leurs données? Edit: Ok, EventAggregator, mais toutes les autres parties rechargeraient alors leurs données (probablement en grande partie en double). Aussi probablement beaucoup d'événements seraient nécessaires pour tous les types de groupes d'entités.
Comment résolvez-vous ces problèmes? Ma solution actuelle est une sorte de compromis - utilisez un ObjectContext partagé pour les données de base utilisées par l'application entière afin qu'elles puissent être partagées et mises à jour automatiquement. Et pour la grande quantité de données, utilisez un nouveau ObjectContext distinct. De meilleures idées?
Existe-t-il un moyen de "libérer" les entités de leur DataContext afin que Garbage collector puisse faire son travail et libérer la mémoire?
Avec cette application, nous parlons de Silverlight. En utilisant Prism/Caliburn, je pense que ce n'est pas un problème d'avoir un seul ObjectContext par vue (module?). Encore une fois, le problème est que s'il y a beaucoup de données à charger au client? autant que je suis maintenant, la meilleure solution serait de créer une ObjectContext commune pour les entités de base qui sont utilisées par l'ensemble de l'application afin que ceux-ci sont automatiquement synchronisés et ObjectContexts séparés pour le chargement d'un grand groupe de données par exemple quelques rapports historiques. – gius
Je n'essaierai pas d'envoyer de gros blocs de données au client. Au lieu de cela, je filtre sur le serveur et ne renvoie que les résultats que le client veut voir à ce moment-là. Les humains ne peuvent pas lire 100 000 enregistrements, alors n'en envoyez pas autant à un humain. Au lieu de cela, laissez le problème de recherche/filtre et envoyez uniquement les résultats au client. Si vous créez des rapports, créez les données récapitulatives globales sur le serveur. Par exemple, il serait préférable de calculer le volume de ventes mensuel sur le serveur et d'envoyer un seul numéro au client que de consulter 5000 fiches de ventes. –
C'est vrai, mais si l'utilisateur voit à tout moment pendant la durée de vie de l'application disons les pages 1, 10, 20, ces données seront toujours dans la mémoire. D'autre part, l'utilisation d'un ObjectContext et d'une pagination de données distincts pourrait résoudre le problème de stockage de données volumineuses. – gius