SeeD2018
Messages postés16Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 6 octobre 2008
-
2 oct. 2008 à 17:24
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
7 oct. 2008 à 17:50
Bonjour,
J'ai des problèmes avec l'utilisation de linq to sql.
J'ai deux applications "A" et "B" qui peuvent modifier et lire des données d'un table de ma base de donnée (sql server 2005). C'est en fait les même applications.
Le resultat des requetes linq me renvoit un résultat différent de celui de la base de donnée... je m'esplique...
En fait lorsque mon application "A" modifie des valeurs dans la base de donnée, la base de donnée est modifiée est les bonnes valeurs apparaissent pour "A" mais l'application "B" ne les "voit" pas. J'ai beau refaire des select, regarder dans le debugger Par contre les valeurs de la table dans la base de donnée sont modifiées.
Inversement si je modifie à partir de l'application "B" , "B" voit les changements mais pas "A".
par la suite j'ai trouvé une méthode du datacontext : .refresh(refreshmode.overwritecurrentvalues,"ma table")
alléluia ca fonctionnait quand "A" modifiait la base de donnée, "B" le voyait.
sauf que ce refresh dégrade complètement les performances de mon application
avez vous une idée pour passer outre cette méthode refresh ou autre?
SeeD2018
ps : quand j'utilisais des fonctions de la classe 'system.data.sqlclient' ca fonctionnait bien, sauf que je dois passer à linq
SeeD2018
Messages postés16Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 6 octobre 2008 3 oct. 2008 à 11:44
Dans le premier cas, c'est le code de la requete qui n'etait pas bon.
Dans le second cas, ca ne vient pas du code de la requete mais d'autre chose, jene sais pas quoi
SeeD2018
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 3 oct. 2008 à 16:42
Salut,
Pour ta 1ère question: Lorsque on modifie une BDD, les changements ne sont pas directement appliqué à la BDD, mais seulement gardé en mémoire locale.
Pour appliquer les changements à la BDD, il faut appeler la méthode SubmitChanges du DataContexte, cela permet d'uploader les changements pour mettre la BDD à jours.
Clair que tu vas perdre en performance, l'utilisation d'une base de données n'est pas destiné à faire du partage de données entre applications locales, et il s'agit d'un traitement sur un fichier, pas seulement dans la mémoire comme lorsque on utilise une List(Of ...) par exemple.
SeeD2018
Messages postés16Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention 6 octobre 2008 3 oct. 2008 à 16:54
Merci pour ta réponse,
J'utilise déjà un submitchange des qu'il ya une modification de la base de donnée,
et ca modifie la base de donnée.Ce que j'essaye d'espliquer c'est que malheureusement ca ne fonctionne que dans l'application en cours et pas dans les autres. comme si linq ne lisait en lecture que les objet en mémoire sans interroger la BDD.
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 3 oct. 2008 à 17:47
La base de données est donc bien mise à jours avec un SubmitChange à partir de l'application A, et pourtant les changements ne sont pas visible si tu réinterroge la base de données depuis l'application B?
Effectivement, étrange, mais je suis dans le même cas que toi, aucune idée pourquoi cela se produit...
Ce qui m'étonne surtout, c'est qu'avec LINQ la base de données n'est pas téléchargé localement au début, mais seulement les données utiles lorsque tu utilise les données, donc dans ton exemple lors du .ToArray.