gpt4 book ai didi

C# 应用程序到 MS SQL 数据库调用堆栈

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:33 24 4
gpt4 key购买 nike

我继承了一个带有 EFv4/.net 4.0 的 C# 应用程序。

使用 SQL Server Profiler 分析一些数据库调用时,我发现一些意外的数据库调用来自应用程序本身(这里没有其他用户,没有其他应用程序或进程混在一起)。

我遇到这样一种情况,当在带有查询信息的 WinForm 对话框中显示时,两个确切的查询被触发到数据库。 (按照逻辑,我想避免第二次调用……或者至少了解它的来源)。

第一个查询在表单的构造函数中触发,其中数据源绑定(bind)到 DbContext.ClassToShow

但是在显示此表单 (ShowDialog()) 之后,第二个查询在某处 被触发。但我不知 Prop 体在哪里...

所以我的问题是:

我应该在哪里设置断点以便在 EntityFramework 触发任何查询之前停止应用程序?

我已经从 DbContext.ClassToShow 属性尝试过,但它只在第一次停止。

编辑:

我尝试更改绑定(bind)的分配方式:

siteBindingSource.DataSource = mDbContext.Site;

到:

var sites = new List<Site>();
var dbSites = mDbContext.Site;
sites.AddRange(dbSites);
siteBindingSource.DataSource = sites;

我还注意到,通过数据库实体在 Visual Studio 中搜索会触发数据库查询。

还是套用同一个问题,如何区分查询数据库的不同地方?

最佳答案

看来数据绑定(bind)系统可以多次枚举数据源对象。每个枚举都会再次执行查询。 Entity Framework 查询对象不缓存它们的结果。

因此,您必须具体化查询(例如使用 ToList())。

出于错误处理和事务管理的原因,这也更好。

关于C# 应用程序到 MS SQL 数据库调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com