Bonjour,
Je désire appliquer des modifications à un objet détaché et récupérer en paramètre de sortie de ma méthode d'update l'objet d'origine (originalItem) avant application des modifications (en fait l'état de l'objet en DB avant l'update).
La méthode TryGetObjectByKey ou GetObjectByKey permet effectivement de récupérer en paramètre de sortie la valeur d'origine de l'objet. Cependant, dès le moment ou ApplyPropertyChanges est appelé avec updatedItem, la valeur de l'objet (originalItem) récupérée est égale à celle d'updatedItem. Je suppose que c'est le comportement normal car après l'exécution de ApplyPropertyChanges ils ont la même référence.
Je vois peut être une solution qui serait de cloner l'objet avant d'appeler ApplyPropertyChanges mais il n'y a pas de méthode de clonage pour les entités donc... si je pouvais trouver une autre solution. Quelqu'un a-t-il une idée?
Merci
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
30
31
32
33 private static void ApplyItemUpdates(SalesOrderDetail updatedItem, out object originalItem) { // Define an ObjectStateEntry and EntityKey for the current object. EntityKey key; object originalItem; using (AdventureWorksEntities advWorksContext = new AdventureWorksEntities()) { try { // Create the detached object's entity key. key = advWorksContext.CreateEntityKey("SalesOrderDetail", updatedItem); // Get the original item based on the entity key from the context // or from the database. if (advWorksContext.TryGetObjectByKey(key, out originalItem)) { // Call the ApplyPropertyChanges method to apply changes // from the updated item to the original version. advWorksContext.ApplyPropertyChanges( key.EntitySetName, updatedItem); } advWorksContext.SaveChanges(); } catch (InvalidOperationException ex) { Console.WriteLine(ex.ToString()); } } }
Partager