0

如何阻止自动生成的 Linq to SQL 类加载所有数据? 在那里发布答案!

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

按照本教程第 3 部分中的说明,我通过创建“Linq to SQL 类”(.dbml) 表面并将我的数据库表放到上面来创建我的数据库的 Linq-to-SQL 模型。设计器已经根据我的数据库表自动添加了生成的类之间的关系。

假设我的课程按照 NerdDinner 示例,所以我有 Dinner 和 RSVP 表,其中每个 Dinner 记录与许多 RSVP 记录相关联——因此在生成的类中,Dinner 对象有一个 RSVPs 属性,它是 RSVP 的列表对象。

我的问题是这样的看起来(我很高兴证明这是错误的)一旦我访问一个 Dinner 对象,它就会加载所有相应的 RSVP 对象,即使我不使用 RSVPs 成员。

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

在我的特殊情况下,对象图包含更多的表(它们的记录要多一个数量级),所以这是灾难性的行为——当我只想显示一个详细信息时,我会加载大量数据单亲记录。

第二个问题:是否有任何通过设计器 UI 公开的属性可以让我修改此行为?(我找不到任何东西)。

第三个问题DataContext:我已经看到了如何通过使用DataShape与 DataContext 关联的对象来控制在 a 中加载相关记录的描述。这就是我的意思吗?如果有的话,是否有像 NerdDinner 这样的教程,不仅可以展示如何做到这一点,还可以建议正常使用的“模式”?

4

1 回答 1

1

给定 Dinner 类,它不会自动加载外键关系属性。您必须设置数据加载选项才能使其工作,如:

var o = new DataLoadOptions();
o.LoadWith<Dinner>(i => i.RSVPs);

但是,无论何时您访问 RSVP,它都会默认自动加载这些(如果您也导航到智能感知中的属性,仅供参考)。

HTH。

于 2010-03-12T19:53:41.587 回答