首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何阻止自动生成的Linq到SQL类加载所有数据?

如何阻止自动生成的Linq到SQL类加载所有数据?
EN

Stack Overflow用户
提问于 2010-03-12 14:39:12
回答 2查看 323关注 0票数 0

UPDATE:据我所知,我是在想象下面描述的问题。所以,这几乎是一个没有问题的问题。未来的读者,继续前进..。这里没什么可看的。

我有一个ASP.NET MVC项目,很像NerdDinner教程的例子。(我使用的是MVC 2,但为了创建它,我遵循了NerdDinner教程)。

按照本教程第3部分中的说明,我创建了一个"Linq类“(.dbml)面,并将我的数据库表放到它上,从而创建了一个从Linq到SQL的数据库模型。设计器根据我的数据库表自动添加了生成的类之间的关系。

假设我的类与NerdDinner示例相同,所以我有晚餐表和RSVP表,其中每个晚餐记录都与许多RSVP记录相关联-因此在生成的类中,晚餐对象有一个RSVP属性,它是RSVP对象的列表。

我的问题是这个:它看起来(我很高兴地证明在这一点上是错的),一旦我访问了一个晚餐对象,它就会加载所有相应的RSVP对象,即使我不使用RSVP成员。

第一个问题:这真的是生成类的默认行为吗?

在我的特殊情况下,对象图包含了更多的表(这些表有更多的记录),因此这是灾难性的行为--当我只想显示一个单亲记录的细节时,我将加载大量的数据。

第二个问题:通过designer UI公开的属性是否允许我修改这种行为?(我找不到)。

第三个问题:我看到了关于如何通过使用与DataContext关联的DataShape对象来控制DataContext中相关记录的加载的描述。这就是我要做的事情吗?如果是这样的话,是否有像NerdDinner这样的教程,不仅可以展示如何做到这一点,而且还可以为正常使用提供一个“模式”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-12 14:41:54

当您拥有1:M关系时,L2S代码生成器将为单个实体生成一个实体类,并在该实体中包含一组子对象。当您检索单一(父)实体时,L2S将不会检索子对象,除非您尝试以某种方式访问子对象集合。这就是所谓的延迟加载。据我所知,除了从未尝试访问子对象集合之外,没有其他方法可以阻止L2S检索子对象。但是请注意,如果您从未访问过子集合,L2S将不会检索子行。因此,由于应用程序正在检索子行,因此必须以某种方式访问集合。

您还可以通过让L2S在尝试访问集合之前自动检索子对象来执行所谓的“急切加载”。然而,听起来这并不是你想要做的。

票数 1
EN

Stack Overflow用户

发布于 2010-03-12 14:44:40

http://www.davidhayden.com/blog/dave/archive/2007/08/05/LINQToSQLLazyLoadingPropertiesSpecifyingPreFetchWhenNeededPerformance.aspx

http://www.davidhayden.com/blog/dave/archive/2009/02/12/LINQToSQLTutorialsLazyLoadingPropertiesPerformance.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2433422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档