Bonjour,
j'ai passé pas mal de temps à chercher comment mettre à jour des champs d'autres tables à celle courante via l'entity framework, sans succès, c'est pourquoi je me tourne vers vous.
Le contexte est simple, j'ai une table lot, livraison et parcelles. Un lot contient une ou plusieurs livraison (1-n) et un ou plusieurs lots contiennent une ou plusieurs parcelles (n-n).
Pour l'insertion tout se passe bien, par contre pour la modification je ne sais pas comment m'y prendre,
- Lorsque je met à jour les parcelles ou les livraisons comme si de rien n'était j'ai un message d'erreur qui me dit que l'objet existe déjà (logique je veux juste qu'il mette à jour), idem lorsque je fais un clear avant
- Lorsque je fais un delete des parcelles ou des livraisons avant de les insérer j'ai également un message d'erreur sur la FK des parcelles (logique aussi il essaye de me supprimer la parcelle, or je veux juste supprimer le lien de la table intermédiaire n-n entre les lots et les parcelles)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 lot.Parcelles.Clear(); entityModel.SaveChanges(); foreach (Parcelles par in parcelles) { Parcelles pc = entityModel.Parcelles.Where(p => p.ParcelleID == par.ParcelleID).First(); lot.Parcelles.Add(pc); }
Il faudrait que je puisse supprimer juste les liens ou quelque chose dans le style...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 entityModel.DeleteObject(lotExistant.Parcelles.First()); entityModel.SaveChanges(); foreach (Parcelles par in parcelles) { Parcelles pc = entityModel.Parcelles.Where(p => p.ParcelleID == par.ParcelleID).First(); lot.Parcelles.Add(pc); }
voici une partie du code que j'utilise pour la mise à jour :
Merci d'avance pour vos lumières.
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 //... IEnumerable<Lots> res; res = from lots in entityModel.Lots.Include("Parcelles").Include("Livraisons") where lots.LotID == lot.LotID select lots; if (res.Count() > 0) // update { Lots lotExistant = res.First(); lotExistant.LotReporte = lot.LotReporte; lotExistant.EstActif = true; lotExistant.DateModification = DateTime.Now; lotExistant.ModifiePar = userName; // etc // lotExistant.Parcelles = ?? // lotExistant.Livraisons = ?? } entityModel.SaveChanges(); //...
Partager