2009-09-23 5 views
2

J'ai une structure de données très simple. J'utilise SQLExpress avec Linq2SQL et vb.netLinq2SQL Les compteurs sont mis en cache?

**ParentClass** 
parentId 
name 


**ChildClass** 
childId 
name 
parentId (foreign key to parent table) 

Le dbml reflète ces deux classes, et a une association OneToMany.

Jusqu'ici, tout va bien.

Dans mon code, je suis en train d'obtenir la valeur comme suit

Dim count as Integer = Parent.ChildClasses.Count 

(la réponse est 10, d'ailleurs). Cela fonctionne au début. J'ajoute cinq enregistrements enfants. Le nombre devrait maintenant être 15, mais il est toujours en lecture 10. Si je reconstruis la solution et réexécute l'application, il montre correctement 15 - au moins jusqu'à ce que je commence à ajouter plus d'enregistrements. Je suis à peu près sûr que c'est une erreur que je fais quelque part. Est-ce une fonction de chargement paresseux ou est-ce que j'aboie le mauvais arbre?

+0

Comment les données sont ajoutées? – Wilhelm

+0

Ajoutez-vous les enregistrements d'une instance différente de votre DataContext? Si ce n'est pas le cas, veuillez poster plus de contexte dans votre code. – Nate

Répondre

1

Votre variable ne changera pas comme par magie car le nombre d'éléments dans le contexte a changé.

Le chargement différé fait référence au fait que la requête est évaluée en unité, mais comme vous affectez une variable dont la valeur est nécessaire et évaluée, la vérification de la variable ne provoque pas l'exécution de la requête.

Une bonne façon de le faire serait juste pour faire une propriété en lecture seule et il suffit d'appeler le comte chaque fois que vous en avez besoin

Public ReadOnly Property Count As Integer 
    Get 
    Return Parent.ChildClasses.Count 
    End Get 
End Property 
+0

Et je viens de réaliser que cette question date d'un an et demi – msarchet

Questions connexes