Je me suis lancé le projet fou de transposer un programme que j’ai fait avec Access et VBA en C# et ce, afin d’avoir un but dans la progression de mon apprentissage de ce langage. Et là, je bute sur un problème avec Entity Framework (et SQL Server).
J’ai monté mon projet en Database First. Je peux lire les données de la base sans problème avec EF. Par contre, la mise à jour ne se passe pas comme il faut. Seul le contexte est modifié lorsque je fais un SaveChanges() mais les données dans la base restent les mêmes, même après une actualisation de celle-ci.
J’ai une table (entre autres) appelée TPara composée ainsi :
- IDPara (clé primaire)
- IDTitulaire (int32)
- Autres non utilisés pour le moment
IDTitulaire correspond à l’identifiant du titulaire sélectionné.
Dans la classe TPara et dans un fichier différent de celui créé par EF, j’ai la méthode suivante :
J’ai volontairement laissé en commentaire (juste après le using) une deuxième méthode que j’ai testé et qui n’a pas donné de meilleurs résultats.
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
27
28
29 public partial class TPara { public static bool EnregistreTitulaireIdSelectionne(long nouvelId) { bool retour = false; try { using (monContext context = new monContext ()) { // var paras = (from p in context.TParas select p).First(); // paras.IDTitulaire = nouvelId; var mesParas = context.TParas.Find(1); mesParas.IDTitulaire = nouvelId; context.SaveChanges(); } } catch { string temp = "L'enregistrement du titulaire sélectionné a échoué !\n\n"; temp = temp + "Message de TPara.EnregistreTitulaireIdSelectionne()"; MessageBox.Show(temp, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error); } return retour; } }
Ce code ne lève aucune exception.
J’ai testé avec « context.Entry(mesParas).State.ToString() » l’état de mon contexte à trois endroits différents : avant la modification de IDTitulaire, après sa modification et après le SaveChange(). J’ai bien respectivement « Unchanged », « Modified » puis « Unchanged ».
En vérifiant directement dans ma table TPara la valeur de IDTitulaire, cette dernière n’a pas changée.
Je vous remercie par avance de toute aide sur ce problème.
Partager