2010-11-17 15 views
0

Notre produit doit être interfacé avec plusieurs systèmes client/partenaire. Par exemple, lorsqu'une personne est ajoutée/mise à jour, nous devons notifier les modifications à un système tiers, par exemple en appelant un service Web ou en créant un fichier xml dans un dossier, etc.Comment activer une action après la réussite de SaveChanges

Nous avons besoin d'un "hook" après SaveChanges a réussi à modifier les modifications dans la base de données. De nombreuses informations peuvent être trouvées sur la façon d'exécuter la logique métier lors de l'enregistrement des modifications (avant que les modifications ne soient conservées dans la base de données), mais moins sur l'exécution de la logique après la persistance des modifications.

Après enquête, je pense à utiliser les éléments suivants:

// Persist data 
cxt.SaveChanges(false); 
// TODO: execute business logic that can get data changes 
// Discard changes and set entities as unmodified 
ctx.AcceptAllChanges(); 

Quelqu'un at-il une meilleure solution pour ce scénario?

Répondre

2

Je sais que cette question est un peu vieux, mais la figure que je voudrais ajouter ceci pour quelqu'un d'autre recherche sur ce sujet.

Je recommande de vérifier EFHooks. La version officielle est un peu obsolète (par exemple .NET 4 seulement), mais j'ai bifurqué le projet et publié un nouveau paquet NuGet, VisoftInc.EFHooks.

Vous pouvez en savoir plus sur les deux paquets dans ce post: http://blogs.visoftinc.com/2013/05/27/hooking-into-ef-with-efhooks/

Fondamentalement, EFHooks vous laisser crochet dans EF (par exemple postInsert ou PostUpdate) et exécuter du code. Les crochets sont pré/post pour insertion/mise à jour/suppression. Une chose à noter est que ceci est basé sur le DbContext, donc si vous utilisez toujours ObjectContext pour EF, cette solution ne fonctionnera pas pour vous.