2011-01-06 4 views
1

J'essaie d'espionner les changements qui sont persistés dans le code EF d'abord avant ils sont validés.Comment visualiser les changements dans EF-CodeFirst avant qu'ils ne soient validés?

Si nous rompons pendant SaveChanges (comme ci-dessous) et la montre forer vers le bas (ci-dessous ci-dessous), vous obtenez à la collecte non publiques ObjectStateManager._deletedEntityStore qui énumère les éléments persited qui doivent être supprimés.

Ce serait idéal pour ce dont j'ai besoin, mais il est non-public. Est-ce que quelqu'un sait d'un autre moyen d'obtenir cette information?

(this.Units.Local ne suffit pas.)

public class MyDbContext: DbContext 
{ 
    public DbSet<Unit> Units { get; set; } 
    public override int SaveChanges() 
    { 
     // Break here... 
    } 
} 

this.ChangeTracker._internalContext.ObjectContext.ObjectStateManager._deletedEntityStore

Cheers, T

+0

"J'essaie d'espionner les modifications qui sont persistantes dans le code EF avant d'être validées." - Pourquoi? –

+0

Je veux effacer certaines choses mais je veux que cela se fasse de manière transparente. Mon exemple (_addedEntryStore) prob n'était pas le meilleur, va mettre à jour ... :) – gingerbreadboy

+0

Cette question n'a vraiment rien à voir avec Code First - le problème et la solution concernent le DbContext d'Entity Framework qui fonctionne avec n'importe quel mécanisme de modèle (Code, modèle, base de données). – DamienG

Répondre

2

Vous pouvez accéder à la coulée par votre DbContext comme IObjectContextAdapter ObjectContext sous-jacente. À partir de là, vous devriez pouvoir vous connecter au ObjectStateManager. En fait, si le ObjectContext sous-jacent est vraiment important, vous pouvez l'exposer en tant que propriété publique. Comme si:

public ObjectContext UnderlyingContext 
{ 
    get 
    { 
     return ((IObjectContextAdapter)this).ObjectContext; 
    } 
} 
Questions connexes