使用LINQ2SQL进行延迟加载的最简单方法

时间:2009-04-01 09:04:04

标签: c# linq-to-sql optimization lazy-loading

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

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

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

例如:一个简单的dbml alt text

如果我有以下代码:

  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);
    }
  }

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

2 个答案:

答案 0 :(得分:2)

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

  • 如果您知道自己需要其他数据(嵌套foreach),为什么不想使用LoadWith?这就是教科书用例
  • 因为你(从帖子)知道延迟加载需要对象跟踪,为什么不只是启用对象跟踪;数据上下文通常应被视为“工作单位”(即短命),因此实际上不太可能造成太大损害。

请参阅官方回复here,了解这两个选项(对象跟踪和延迟加载)的关联原因。

答案 1 :(得分:0)