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

问题描述 投票:2回答: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);
    }
  }

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

c# linq-to-sql optimization lazy-loading
2个回答
2
投票

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

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

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


© www.soinside.com 2019 - 2024. All rights reserved.