Bonjour,
J'ai une application qui au démarrage m'en lance une autre.
Ce système est basé sur ce bout de code :
Ma première appli est une appli cliente qui permet d'accéder a des données via EntityFramework.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Framework.Process.ThreadManager.DefaultManager.AddMethod(() => { if (File.Exists(System.IO.Path.Combine(Environment.CurrentDirectory, @"Utilitaires\Migration.exe"))) { ProcessStartInfo PSI = new ProcessStartInfo(System.IO.Path.Combine(Environment.CurrentDirectory, @"Utilitaires\Migration.exe")); Process P = Process.Start(PSI); P.WaitForExit(); } });
Ma deuxième appli (lancé en supplément) est une appli qui rapatrie des données d'une BDD de données à une autre.
Point important :
Les 2 applications utilisent les mêmes librairies, ainsi mon objet context (EntityFramework).
L'objet context est retourné via une méthode statique de ma librairie commune :
Ma question est relativement simple, est-ce que l'object EntitiesContext des 2 applications est le même ?
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
25
26 private static EntitiesContext _Context = null; public static EntitiesContext Context { get { if(_Context == null) { try { if (string.IsNullOrEmpty(ConnectionString)) { _Context = new EntitiesContext(); } else { _Context = new EntitiesContext(ConnectionString); } } catch { throw; } } return _Context; } }
Dans l'appli client il m'est arrivé que ma fonction HasChange me return true alors que je n'ai pas encore modifié mes données. (A part que la deuxième appli était en cour d’exécution en tâche de fond)
Le problème s'est manifesté lorsque j'ai utilisé ma fonction de sauvegarde (dans ma lib commune) qui s'est complètement emballé et à sauvegarder tout mon context courant comme s'il était entièrement changé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public bool HasChanges { get { int Count = ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added).Count()+ ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted).Count()+ ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified).Count(); return Count > 0; } }
N'étant arrivé que 2 fois à des endroits totalement différents et n'arrivant pas à reproduire le problème mes questions se sont donc tournés sur le deuxième programme qui lui a pour but de mettre à jour les données de ma base.
S'il manque de précision dans mes dires, n'hésitez pas à me le dire pour que je puisse éventuellement donner des infos plus claires.
Je vous remercie d'avance pour toutes les réponses que vous pourrez m'apporter.
Partager