2009-08-24 7 views
1

J'ai un rapport qui essaie de montrer Order.Customer.Address.Line1 dans un rapport. Mon objet Order provient d'un fichier Linq2Sql DBML.VS2008, le rapport via RDLC pose problème avec les objets de second niveau en raison d'une charge paresseuse

Dans le rapport, je le définis comme Fields! Customer.Value.Address.Line1, mais il apparaît comme "#Error". J'ai ensuite essayé de "toucher" la variable avant de la passer au RDLC, et j'ai constaté que cela a soudainement fonctionné.

Apparemment, cela n'arrive qu'au deuxième niveau, car je peux imprimer Fields! Customer.Value.Name sans problèmes.

I pourrait alors alors il suffit de toucher tous les objets de second niveau, mais il semble .. idiot.

Est-ce que quelqu'un connaît un moyen de le faire fonctionner, de sorte que je n'aurai pas besoin de faire cela?

Répondre

1

WAG ... mais disposez-vous du DataContext avant la visualisation de votre rapport? Linq to Sql utilise une exécution différée, donc vos "objets de deuxième niveau" ne sont pas là jusqu'à ce que vous y accédiez. Les classes d'entités Linq to Sql stockent des informations sur la façon d'accéder à certaines choses (comme des collections d'enregistrements associés) plutôt que de tout charger en même temps. Si le DataContext utilisé pour charger vos entités passe en mode bye-bye avant que vous accédiez à ces parties chargées en retard, cela va échouer. En les «touchant» d'abord, ils sont chargés avant que le DataContext disparaisse. Une chose que vous pouvez faire est de désactiver le chargement paresseux sur les parties de vos modèles que vous prévoyez d'utiliser dans ce scénario. Here's a blog post about doing this. L'autre option consiste à les "toucher" avant de les renvoyer, en appelant "ToArray()" ou "ToList()" ou quelque chose de similaire à ces collections chargées en différé. Quoi de mieux dépend de votre conception. Désactiver le chargement différé est probablement la solution la plus rapide et la plus simple.

+0

Merci pour le lien. Je crée le rapport et je le convertis en PDF en une seule fois, donc je ne pense pas * que le DataContext disparaisse. J'ai également essayé de définir "ExecuteInCurrentAppDomain", mais je ne suis pas vraiment sûr de ce que cela était censé accomplir. C'était juste quelque chose que je lisais à mi-chemin quelque part. – Soraz

Questions connexes