2009-05-21 6 views
2

J'ai rencontré un blocage qui s'est répercuté sur la situation décrite ci-dessous. Je n'ai pas eu beaucoup d'aide pour répondre à mes questions précédentes (je pense que je dois apprendre à les encadrer mieux) mais j'espère que quelqu'un peut au moins m'expliquer cela (je suis un débutant à LINQ et je n'ai pas eu possibilité d'y lire longuement). J'utilise un modèle de référentiel pour accéder aux données via LINQ-to-SQL. J'essaie d'utiliser 1 contexte de données déclaré en tant que static public afin que j'utilise toujours le même contexte.Relation LINQ DeferredLoadingEnabled & DataLoadOptions

Problème 1: Les pages Web étaient chargées avec des valeurs mises en cache immédiatement après l'enregistrement des modifications. Les modifications ont été propagées vers la base de données, mais le datacontext crachait une copie en cache de l'objet.

Solution de contournement: Définissez sur le datacontext.

Problème 2: Maintenant, les objets ne peuvent pas charger paresseux - toutes les entités dans l'objet donné sont nulles quand je les examine pendant le débogage.

Solution de contournement: Définissez le sur le datacontext.

Problème 3: LINQ ne définit pas automatiquement le chargement immédiat pour toutes les entités associées à l'objet donné.

Solution: Explicitement configurer LoadOptions pour DataContext et identifier manuellement chaque entité associée en définissant LoadWith<Object>(o => o.entity1), LoadWith<Object>(o => o.entity2), ..., LoadWith<Object>(o => o.entityN). Est-ce que certains peuvent m'aider à surmonter le problème de mise en cache sans avoir à faire face au reste?

Sinon, quelqu'un peut-il me dire s'il y a une autre façon de mettre ImmediateLoadingEnabled (ou quelque chose comme ça) sur le contexte de données, de sorte que je n'ai pas explicitement les options de chargement pour toutes entités associées à tous objets dans mon domaine?

J'apprécierais beaucoup vos commentaires. Si je pose des questions sans suffisamment d'informations ou si vous voulez un exemple, s'il vous plaît faites le moi savoir!

Merci d'avance!

Répondre

1

Vous ne pouvez pas utiliser un seul contexte pour une application Web, car une application Web est multithread (1 thread par requête par exemple) et cela signifie que plusieurs threads utilisent le même contexte. I.o.w .: vous devez utiliser un système où, pour chaque requête de données, vous créez un nouveau contexte et l'utilisez pour que la requête soit exécutée, puis disposez le contexte.

+0

Salut, Donc, ayant pris en compte la nature multithread des applications web, certains autres problèmes que j'ai rencontrés sont maintenant résolus. Mais, je trouve toujours que le problème 1 reste - comme c'est, techniquement, la même demande encore en cours d'entretien je ne pense pas que ce soit une solution viable au problème initial. ASP.NET MVC ... si cela fait une différence. – feemurk

+0

La requête est entrée (Édition éditée) - la requête crée un nouveau contexte, élément de contexte égal à celui dont les données doivent être mises à jour sont extraites du contexte (et je présume qu'il est en cache), l'élément est mis à jour et sauvegardé et l'action de réponse est d'essayer de récupérer la copie mise à jour de la DB une fois de plus pour passer en tant que données de modèle à une vue. Je pense que c'est correct - pls corrigez-moi si mon je me trompe :) Merci! – feemurk