31 votes

Quel est l’effet des différentes EF 4 SaveOptions sur ObjectContext?

Je suis en train de résoudre une erreur très similaire à celui présenté ici:

InvalidOperationException lors de l'appel de SaveChanges dans .NET Entity framework

Il semble que la solution (que je n'ai pas encore essayé, il est vrai) est de passer du Système.Les données.Objets.SaveOptions.Aucun comme SaveOptions paramètre pour la SaveChanges() la méthode.

Donc, avant de me faire, je suis en train d'essayer de comprendre exactement comment les différents SaveOptions travail (Aucun, AcceptAllChangesAfterSave, DetectAllChanges). Je n'ai pas été en mesure de trouver une explication claire de il cependant, je ne suis pas sûr de ce que le défaut est. Quelqu'un peut-il préciser?

Merci!

Mise à JOUR: j'ai posté le problème réel de question ici: le Système.InvalidOperationException lors de la tentative de manière itérative ajouter des objets à l'aide de EF 4

18voto

D3M80L Points 121

Court de correction pour

SaveOptions.DetectChangesBeforeSave : c'est la valeur par défaut. Lorsque vous ne ObjectContext.SaveChanges(), la méthode DetectChanges() est appelée pour synchronisé joindre les entités de l'OSM.

SaveChanges est une version surchargée de la SaveChanges(SaveOptions optsions) méthode, où ce sans paramètre appelle cette version

SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave)

SaveOptions est un Drapeau enum et en conclusion, SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave est la valeur par défaut de SaveChanges() pas DetectChangesBeforeSave

17voto

RPM1984 Points 39648

Bonne question (+1).

En un mot, ce que je comprends):

SaveOptions.DetectChangesBeforeSave : c'est la valeur par défaut. Lorsque vous ne ObjectContext.SaveChanges(), la méthode DetectChanges() est appelée à synchronisée joindre les entités de l'OSM.

SaveOptions.AcceptAllChangesAfterSave : Lorsque vous ne ObjectContext.SaveChanges(), la méthode AcceptAllChanges() est appelé - qui est le courage de l'OSM, où les entités dans le graphique sont itérées, adresses et mis à Inchangé/Détaché.

SaveOptions.None : Lorsque vous ne ObjectContext.SaveChanges(), les modifications sont enregistrées immeditately - pas de synchronisation. Ce qui est dans le graphe est ce qui pourra être sauvé.

Dans mon expérience, je n'ai pas gâché avec cela - je l'ai laissé la valeur par défaut (DetectChangesBeforeSave).

Parfois avec POCO j'ai entendu que vous devez appeler explicitement DetectChanges, mais je n'ai jamais vu une recommandation de solution pour changer le SaveOptions à aucun.

Êtes-vous sûr que la solution de cette question est de mettre en SaveOptions à aucun? Peut-être que vous devez fournir les détails (ou de poser une autre question) quant à l'erreur de votre arriver, comme un changement comme cela va affecter l'ensemble de votre couche de persistance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X