Cela devrait être assez simple.Problème de mise en cache LINQ to SQL
Je LINQ to SQL (C# 3.5/SQL Server) fonctionne bien, avec une relation simple entre deux tables Conférences et ConferenceAttendees.
Je l'ai déjà créé et engagé une Conférence, puis ajouter 3 ConferenceAttendees en utilisant le code suivant (répété 3 fois):
fonctionne très bien et je vois les apparaissent 3 nouveaux participants dans la base de données.
MISE À JOUR: Puis, en utilisant une nouvelle marque datacontext, je les opérations suivantes:
string Names = String.Empty;
Conference RequestedConference = db.Conferences.FirstOrDefault(x => x.ConferenceId == ConferenceID);
foreach (ConferenceAttendee Attendee in RequestedConference.ConferenceAttendees)
Names += Attendee.Name + ", ";
Mais il n'a pas de participants connexes qui s'y rattachent! (Ils existent définitivement dans la base de données et ont été validés). Mais RequestedConference.ConferenceAttendees a toujours un compte de 0 si la boucle est jamais entré ..
foreach (ConferenceAttendee Attendee in this.ConferenceAttendees)
{ Names += Attendee.Name; }
Je fais cela à l'intérieur d'une conférence partielle de classe, avec une méthode que je l'ai fait appelé PrintAllAttendeeNames(). Qu'est-ce que je fais mal et pourquoi ce nouveau contexte de données ne voit-il pas facilement ces objets liés via LINQ lorsqu'ils sont déjà engagés dans la base de données?
(Note: Je l'ai déjà essayé d'appeler
db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
en vain ..)
Un grand merci
CONFESSION MISE À JOUR
Je suis un crétin absolu. J'avais l'installation de dataContext comme statique. Je ne fais jamais ça normalement, c'est pourquoi je n'ai jamais de problèmes de chargement paresseux.
J'ai eu ceci:
public static MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);
Bien sûr, changer à cette résolu le problème !!!
public MyDataContext db = new MyDataContext(ConfigurationManager.ConnectionStrings["MyDBConnection"].ConnectionString);
Merci pour le premier point, bon à savoir et je ferai dorénavant. J'ai toujours des problèmes. Oui, le chargement paresseux fonctionne normalement bien pour moi aussi. Ça doit être quelque chose de vraiment simple! Voir ci-dessus: J'ai mis à jour pour expliquer le code que j'utilise pour charger dans la conférence et itérer à travers les participants. Mais le compte est toujours 0! – Aaron
Je suis un crétin. J'ai déclaré le dataContext comme statique !!! GRRR !!! Un grand merci pour votre aide et désolé de perdre votre temps. 1 point. – Aaron
De manière générale, un DataContext ne doit JAMAIS rester plus longtemps que le temps nécessaire pour effectuer un travail. Le DataContext est une unité de classe de travail, ce qui en fait un champ ou une propriété d'une classe est une mauvaise idée. Créez le plus tard possible, éliminez le plus tôt possible et créez une nouvelle instance chaque fois que vous travaillez dans une unité. – jrista