2010-07-15 57 views
0

我正在使用Linq-to-SQL(C#3.5)从我的数据库(SQL Server 2000)中读取两个表,即house和county。 House有一个CountyID列与县表中的ID列匹配。县表有ID和CountyName列。数据库中没有关联 - 我将它添加到dbml文件中。 (父类=县,孩子类=房子)LINQ to SQL - 当我将ObjectTrackingEnabled关闭时丢失关联

现在我可以查询房子表,并得到县名为house.County.CountyName - 正是我想要的。

这很好,除非我设置EnableObjectTracking为false。我获得大约3倍的性能提升,但House中的County儿童对象为null。

有没有办法解决这个问题?

回答

1

当您将EnableObjectTracking设置为false时,还可以关闭延迟加载子实体,如您所注意到的。 MSDN说...

延期加载需要对象 跟踪。只有以下三种 模式有效:

ObjectTrackingEnabled = false。 DeferredLoadingEnabled被忽略,​​ 被推断为false。此行为 对应于只读 DataContext。

ObjectTrackingEnabled = true。 DeferredLoadingEnabled = false。此 情况对应于DataContext ,它允许用户通过使用LoadWith指令加载对象 图 但它不启用延迟 加载。

两者都设置为true。这是默认的 。

如果您想保持对象跟踪禁用,您可以使用LoadWith方法来填充您的子实体。请参阅MSDN了解更多关于LoadWith