LINQ to SQL - 当我关闭 ObjectTrackingEnabled 时关联丢失

发布于 2024-09-09 16:24:22 字数 366 浏览 1 评论 0原文

我正在使用 Linq-to-SQL (C# 3.5) 从我的数据库 (SQL Server 2000) 读取两个表:房屋和县。 House 有一个 CountyID 列,与县表中的 ID 列相匹配。 County 表具有 ID 和 CountyName 列。数据库中没有关联 - 我将其添加到 dbml 文件中。 (父类 = County,子类 = House)

现在我可以查询 House 表并获取县名称 house.County.CountyName - 这正是我想要的。

除非我将 EnableObjectTracking 设置为 false,否则这效果很好。我获得了大约 3 倍的性能提升,但 House 中的 County 子对象为空。

有办法解决这个问题吗?

I am using Linq-to-SQL (C# 3.5) to read two tables, house and county, from my database (SQL Server 2000). House has a CountyID column that matches an ID column in the county table. The County table has ID and CountyName columns.There is no association in the database - I added it in the dbml file. (Parent class = County, Child class = House)

Now I can query the House table and get the county name as house.County.CountyName - just what I want.

This works great unless I set EnableObjectTracking false. I get approx 3X performance improvement but the County child object in House is null.

Is there a way around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

亽野灬性zι浪 2024-09-16 16:24:22

当您将 EnableObjectTracking 设置为 false 时,您还会注意到延迟加载子实体。 MSDN 说...

延迟加载需要对象
追踪。只有以下三个
模式有效:

对象跟踪已启用 = false。
DeferredLoadingEnabled 被忽略并且
推断为假。这种行为
对应只读
数据上下文。

对象跟踪已启用 = true。
DeferredLoadingEnabled = false。这
情况对应一个DataContext
允许用户加载对象
使用 LoadWith 指令绘制图表,
但它没有启用延迟
正在加载。

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

如果您想保持对象跟踪处于禁用状态,您可以使用 LoadWith 方法来填充子实体。有关 LoadWith

When you set EnableObjectTracking to false, you also turn off lazy loading child entities as you have noticed. MSDN says...

Deferred loading requires object
tracking. Only the following three
modes are valid:

ObjectTrackingEnabled = false.
DeferredLoadingEnabled is ignored and
inferred to be false. This behavior
corresponds to a read-only
DataContext.

ObjectTrackingEnabled = true.
DeferredLoadingEnabled = false. This
situation corresponds to a DataContext
that allows users to load an object
graph by using LoadWith directives,
but it does not enable deferred
loading.

Both are set to true. This is the
default.

You can use the LoadWith method to populate your child entities if you want to keep Object Tracking Disabled. Please see MSDN for more information on the LoadWith

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文