1

我有一份报告试图在报告中显示 Order.Customer.Address.Line1。我的 Order 对象来自 Linq2Sql DBML 文件。

在报告中,我将其定义为 Fields!Customer.Value.Address.Line1,但它显示为“#Error”。

然后,我尝试在将变量传递给 RDLC 之前“触摸”该变量,结果它突然起作用了。

显然这只发生在第二级,因为我可以毫无问题地打印 Fields!Customer.Value.Name。

然后我可以触摸任何和所有二级对象,但这似乎......愚蠢。

有谁知道让它工作的方法,所以我不需要这样做?

4

1 回答 1

1

WAG ...但是您是否在查看报告之前处理了 DataContext ?Linq to Sql 使用延迟执行,因此在您访问它们之前,您的“二级对象”并不存在。Linq to Sql 实体类存储有关如何访问某些事物(如相关记录的集合)的信息,而不是一次加载所有内容。如果用于加载实体的 DataContext 在您访问这些延迟加载的部分之前就消失了,它就会失败。通过首先“触摸”它们,它们会在 DataContext 消失之前被加载。

您可以做的一件事是关闭您预期在这种情况下使用的模型部分的延迟加载。 这是一篇关于这样做的博客文章。另一种选择是在返回它们之前“触摸”它们,方法是调用“ToArray()”或“ToList()”或类似于这些延迟加载的集合。什么是最好的取决于您的设计。关闭延迟加载可能是最快和最简单的解决方案。

于 2009-08-24T18:01:16.247 回答