Meilleur auteur de réponses
Entity framework entity en état modifié (et fait un update) bien qu'on affecte une valeur identique ?

Question
-
Bonjour,
J'explique avec un exemple:
/
// on recupere une entité var myEntity context.GetClient(543622); // en base cette entité avait déja une valeur myValue=10 //l'entité se retrouve donc aussi avec cette valeur //on modifie l'entité avec la meme valeur myEntity.myValue = 10; // ensuite on va recuprer les chnageemnt de cette entité ObjectStateEntry ose = null; _context.ObjectStateManager.TryGetObjectStateEntry(myEntity.EntityKey, out ose); // ose.State indique un état modifé // et ci dessous count = 1 ??!!... var count = ose.GetModifiedProperties().Count(); // enfin un SaveChanges engendre un update... (tracké avec SQL Server Profiler). _context.SaveChanges();
Il semble que si on affecte la meme valeur a une propriete d'une entité, l'entité est en etat modifé et genere un update .Je suis surpris par ce comportement, je m'attendais a mise a jour si les valeurs avaient changées...
Sinn'
Réponses
-
Oui, mais je m'attendais par defaut a un comportement plus intelligent !
En fait lorsque l'on regarde le code-behind generé par entity dans le set de chaque propriete:
set { this .OnNomChanging(value); this .ReportPropertyChanging("Nom" ); this ._Nom = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false ); this .ReportPropertyChanged("Nom" ); this .OnNomChanged(); }
Sinn'- Marqué comme réponse Sinner73 lundi 3 janvier 2011 16:52
-
Bonjour,
A partir de la documentation MSDN pour Ajout, modification et suppression d’objets (Entity Framework) :
« L'état d'un objet passe de Unchanged à Modified chaque fois qu'un accesseur Set de propriété est appelé. Cela se produit même quand la valeur qui est définie est identique à la valeur actuelle. »
Le comportement de votre objet est consistent avec les spécifications.
Cordialement,
Alex
________________
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu mercredi 29 décembre 2010 11:33
Toutes les réponses
-
Bonjour,
A partir de la documentation MSDN pour Ajout, modification et suppression d’objets (Entity Framework) :
« L'état d'un objet passe de Unchanged à Modified chaque fois qu'un accesseur Set de propriété est appelé. Cela se produit même quand la valeur qui est définie est identique à la valeur actuelle. »
Le comportement de votre objet est consistent avec les spécifications.
Cordialement,
Alex
________________
Astuces pour Visual Studio 2010
XNA – Développement jeux vidéo
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF
Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.
- Marqué comme réponse Alex Petrescu mercredi 29 décembre 2010 11:33
-
Oui, mais je m'attendais par defaut a un comportement plus intelligent !
En fait lorsque l'on regarde le code-behind generé par entity dans le set de chaque propriete:
set { this .OnNomChanging(value); this .ReportPropertyChanging("Nom" ); this ._Nom = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false ); this .ReportPropertyChanged("Nom" ); this .OnNomChanged(); }
Sinn'- Marqué comme réponse Sinner73 lundi 3 janvier 2011 16:52