Obtenir toutes les entités suivies à partir d'un DbContext?
De nombreuses tables dans ma base de données doivent avoir une "DateCreated" et "DateModified" de la colonne. Je veux mettre à jour ces colonnes à chaque fois que SaveChanges()
est appelé.
Tous mes objets de modèle hériter d'une classe AbstractModel
pour permettre ce genre de comportement. La classe ressemble à ceci:
public abstract class AbstractModel {
public virtual void UpdateDates() { }
}
J'ai ensuite prévoyez de remplacer UpdateDates()
dans n'importe quel enfant des classes qui ont des DateCreated
et DateModified
champs dont ils ont besoin pour maintenir.
Pour l'utiliser, j'ai besoin d'être en mesure d'obtenir une liste de toutes les entités qui le DbContext
est suivi, et d'appeler UpdateDates()
sur eux si l'objet est marqué comme étant Added
ou Modified
.
Je n'arrive pas à accéder à l'endroit où DbContext
est de stocker cette information. Je peux faire dbContext.Entry(object).State
pour obtenir le EntityState
d'une entité unique, mais je ne peux pas travailler sur la façon d'obtenir une liste de toutes les entités de suivi.
Comment puis-je faire cela?
source d'informationauteur Oliver
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez utiliser le ChangeTracker pour cela:
La solution retenue ici est mieux pour ci-dessus EF4 que le ObjectContext suggestion - que nous avons rencontré des problèmes avec, par exemple, la mémoire db, nous avons utilisé dans le contexte de test ne fonctionne pas bien avec la solution ci-dessus (se Détache de l'état pour certains, modification des entrées dans l'héritage des scénarios). Cette solution utilise le DbContext natif moyen de récupérer les entités de suivi:
Ce qui a bien fonctionné dans notre projet afin de ne pas avoir à vous rappeler de remplacer quelque chose chaque fois que nous ajoutons une nouvelle entité qui a notre niveau LastUpdatedDateTime de la propriété.
À l'aide de EF4; pour une EF5 DbContext je pense que ((IObjectContextAdapter)_dbContext).ObjectContext.Vousmanager vous obtenir l'état de l'objet gestionnaire:
L'appel de réflexion n'est pas un problème: pour un objet avec 25 propriétés (beaucoup), un million de réflexion requêtes prend un avg ~210 ms.