Comment obtenir des valeurs d'origine d'une entité dans le Cadre de l'Entité?
En EF 4.0, si je comprends bien droit, il existe deux types de valeurs au sein de l'Entité : valeurs actuelles et les valeurs d'origine.
Nous pouvons définir les valeurs d'origine par l'appel de ApplyOriginalValues(TEntity) méthode mais comment obtenir les valeurs d'origine ?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez y accéder à travers ObjectStateEntry
var name = (string)originalValues["Name"];
@Eranga réponse est obsolète pour EF 5. Pour une raison quelconque, EF 5 ne fonctionne pas correctement lors de l'obtention de valeurs d'origine à l'aide d'une instruction de ce genre:
Ma solution de travail utilise
AsNoTracking()
méthode deDbSet
, comme dans l'exemple ci-dessous:Cela pourrait être affiné à la suivante:
La
Where
ci-dessus, bien, la réponse n'est pas nécessaire.J'ai rencontré un problème similaire et AsNoTracking était pas une option pour ma situation donc je suis venu avec quelque chose qui fonctionne assez bien pour moi: d'abord "clone" de l'entité, puis faire des changements.
puis de comparer le clone à la a changé.
Il y a quelques versions de l'Entity Framework en cours d'utilisation.
Moi je préfère le Premier Code et avec cette API, il est facile comme
Docs
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs. 103).aspx
L'ancienne API ont une méthode d'Actualisation sur la ObjectContext qui peut aider dans certains cas d'utilisation
Docs https://msdn.microsoft.com/en-us/library/bb896255(v=vs. 110).aspx
var originalEntity = (EntityType)contexte.Entrée(editEntity).OriginalValues.ToObject();
Désolé pour mon anglais.
Avec cette façon, vous pouvez obtenir de l'entité d'origine des valeurs sous la forme de l'objet entité avec pas de modifications de modifier des valeurs.
Exemple:
Si vous voulez modifier une Personne de la ligne en haut de ressembler à ce
var originalPerson = (Personne)contexte.Entrée(editPerson).OriginalValues.ToObject();
Cette réponse fait référence à Entity Framework 6. En EF 6 il y a une valeur initiale et la valeur Actuelle https://msdn.microsoft.com/en-us/library/gg679512(v=vs. 113).aspx Après la recherche et de ne pas trouver une bonne réponse, je suis venu avec le test suivant la fonction et pensé que je pourrais le poster pour les autres qui ont besoin de faire la même chose.