2

我有一个只读数据库,所以我关闭了 ObjectTracking(因此隐式关闭了 DeferredLoading)。

我希望做延迟加载而不是使用 LoadWith<>。

在我需要数据本身之前,明确告诉 Linq 去惰性获取关系的最简单方法是什么。

例如:一个简单的 dbml 替代文字

如果我有以下代码:

  TestDbDataContext context = new TestDbDataContext(Settings.Default.TestersConnectionString);
  context.ObjectTrackingEnabled = false;

  var result = context.Employees.ToList();
  foreach (var employee in result)
  {
    // HERE Should load gift list
    foreach (var gift in employee.Gifts)
    {
      Console.WriteLine(gift.Name);
    }
  }

我知道我可以再次编写完整的查询,但我希望我们能一起找到更好的方法。

4

2 回答 2

2

您正在与系统作斗争... 2个想法:

  • 如果您知道您需要其他数据(嵌套foreach),为什么不想使用LoadWith?这几乎是教科书的用例
  • 既然您(从帖子中)知道延迟加载需要对象跟踪,为什么不只启用对象跟踪;数据上下文通常应被视为“工作单元”(即短暂的),因此这在现实中不太可能造成太大伤害。

请参阅此处的官方回复,了解为什么链接这两个选项(对象跟踪和延迟加载)。

于 2009-04-01T09:09:46.080 回答
0

使用 LazyList: http ://blog.wekeroad.com/blog/lazy-loading-with-the-lazylist/

于 2009-04-01T12:06:30.837 回答