Linq to sql 如何避免将Linq中的关联数据立即加载到SQL

Linq to sql 如何避免将Linq中的关联数据立即加载到SQL,linq-to-sql,Linq To Sql,假设我有一个如下所示的实体 public Order OrderEntity { EntityRef<Customer> CustomerEntity; EntitySet<OrderDetail> OrderDetailEntity; ... ... } 当我检索OrderEntity并将其转换为列表时,L2S还将检索CustomerEntity中的实体以及OrderDetailEntity中的

假设我有一个如下所示的实体

public Order OrderEntity 
{      
   EntityRef<Customer> CustomerEntity;      
   EntitySet<OrderDetail> OrderDetailEntity;      
   ...      
   ...
}
当我检索OrderEntity并将其转换为列表时,L2S还将检索CustomerEntity中的实体以及OrderDetailEntity中的所有实体及其所有子实体等。。通常情况下,我们不希望出现这种行为。如何告诉L2S不要这样做


谢谢-Randy在创建要启用的数据上下文集之后

dataContext.DeferredLoadingEnabled = true;
当代码访问其中一个关系时,如果关系是一对一,则返回null;如果是一对多,则返回空集合。仍然可以通过设置LoadOptions属性来填充这些关系

此属性的主要场景是使您能够提取对象模型的一部分,并将其发送到例如Web服务


有关与对象跟踪的交互,请参见其他备注。

re:EntitySet,LINQ to SQL将仅延迟加载这些实体

为了证明这一点,请检索我们的OrderEntity,然后处理您的数据上下文。您将得到一个例外,说明无法从已处理的上下文检索更多数据

您可以使用LoadOptions类强制LINQtoSQL加载这些子实体,但不能强制它不加载它们。默认情况下,不会加载它们


我不知道是否可以删除对父实体的引用。

延迟加载EntityRefs/Set是默认的L2S行为

有一件事可能会让您产生相反的想法,那就是在VisualStudio调试器中查看您的实例会访问ref的属性,从而导致加载它们。这可能会让他们看起来像是迫不及待地被加载,而实际上这只是VS


要准确查看加载内容和加载时间,请将上下文的日志属性设置为Console.Out。这将把所有执行的命令输出到Visual Studio输出窗口。

请仔细考虑一下问题的标题。我相信它们对你来说是很直观的,但是…我确实考虑过这个标题。我最初把它命名为更具体的东西。它几乎没有读者。然后我把它改成了如何避免这种行为,并得到了很多读者的关注。我不知道你试图玩这个系统是更可悲,还是你把它作为一个理由。当然,如果我发布一个题为“免费淘气Pam图片”的问题,我会得到更多的阅读。我想我还会收到更多的关闭请求和标志。也许当时没有那么多人对林克感兴趣?阿德里亚诺-我想你需要另一种爱好。