0

J'ai une application C# qui utilise Entity Framework 6. J'Interroger une base de données comme ceci:Entity Framework - ChangeTracker contient de nombreux articles

public static DB.Core.DBBlob getBlob(DB.Core.DBAspect aspect, int index) 
    { 
     var blobs = aspect.DBBlobs.Where(b => b.Index == index); 
     return blobs.OrderByDescending(b => b.CreationTime).FirstOrDefault(); 
    } 

Le problème est maintenant que le ChangeTracker contient 2 entrées enter image description here

Le premier élément est celui que j'ai interrogé à partir de la base de données et le second est celui que j'ai exclu avec l'instruction where (je veux seulement avoir l'élément avec Index == 1).

Il semble que EF6 charge les deux entrées de la base de données et ajoute au changetracker.

I Tried Vous avez déjà défini les paramètres suivants:

dbm.Configuration.AutoDetectChangesEnabled = false; 
dbm.Configuration.LazyLoadingEnabled = false; 
dbm.Configuration.ProxyCreationEnabled = false; 

Espérons que quelqu'un peut me aider.

+0

Quel est exactement le problème? Avez-vous peur des problèmes de performance? Êtes-vous sûr que les valeurs des entités sont chargées ou sont-elles chargées lorsque vous déboguez et y accédez? –

+0

Le problème est que l'infrastructure d'entité charge les données de la base de données et la mémoire augmente. La performance diminue également. – user3107989

+0

Êtes-vous vraiment sûr à ce sujet ou sont-ce des hypothèses? Si c'était comme vous le dites, ce serait un problème ** énorme ** et EF ne serait pas utilisable du tout si les tables grossissaient. –

Répondre

0

J'ai trouvé une solution. Le problème est que Entity Framework charge tous les éléments "enfants". Ce que je fais maintenant est que j'interroge le DbSet directement (en prenant le modèle de base de données) et ajoute dans l'instruction where l'Id de l'élément parent.