Enregistrer une seule entité au lieu du contexte entier

c# entity-framework

Question

J'ai rencontré un scénario dans lequel j'ai essentiellement besoin d'écrire les modifications d'une entité enfant d'une association un-à-plusieurs à la base de données, sans enregistrer les modifications apportées à l'entité parent.

Entity Framework traite actuellement des validations de base de données dans la portée du contexte (EntityContext.SaveChanges ()), ce qui est logique pour imposer des relations, etc. Mais je me demande s'il existe des meilleures pratiques ou peut-être une façon recommandée de bien faire les choses base de données grainée s’engage sur des entités individuelles au lieu de l’ensemble du contexte.

Réponse acceptée

Les meilleures pratiques? Voulez-vous dire, en plus, "ne le fais pas!"?

Je ne pense pas qu'il existe une meilleure pratique pour rendre un ObjectContext différent de l'état de la base de données.

Si vous devez le faire, je créerais un nouveau ObjectContext et apporterais les modifications à l'entité enfant. De cette façon, les deux contextes sont cohérents.


Réponse populaire

J'ai un besoin similaire. La solution que je considère est d'implémenter des propriétés d'encapsidation sur toutes les entités qui stockent toute modification de propriété en privé sans affecter la propriété d'entité réelle. J'ajouterais alors une méthode SaveChanges () à l'entité qui écrirait les modifications apportées à l'entité et appellerait ensuite SaveChanges () sur le contexte.

Le problème avec cette approche est que vous devez rendre toutes vos entités conformes à ce modèle. Mais cela semble plutôt bien fonctionner. Cela présente un autre inconvénient, car si vous apportez de nombreuses modifications à de nombreux objets contenant beaucoup de données, vous obtenez des copies superflues en mémoire.

La seule autre solution à laquelle je puisse penser est, lors de la sauvegarde des modifications, de sauvegarder les états des entités de toutes les entités modifiées / ajoutées / supprimées, de les définir telles quelles, sauf celle que vous modifiez, les autres entités. Mais cela semble potentiellement lent.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow