C# 应用程序到 MS SQL 数据库调用堆栈
C# application to MS SQL database callstack
我继承了一个带有 EFv4/.net 4.0 的 C# 应用程序。
使用 SQL Server Profiler 分析一些数据库调用我发现一些意外的数据库调用来自应用程序本身(这里没有其他用户,没有其他应用程序或进程混合)。
我遇到这样一种情况,当在带有查询信息的 WinForm 对话框中显示时,两个确切的查询被触发到数据库。 (按照逻辑,我想避免第二次调用……或者至少了解它的来源)。
第一个查询在表单的构造函数中触发,其中数据源绑定到 DbContext.ClassToShow.
但是在显示此表单 (ShowDialog()) 后,第二个查询在 某处 被触发。但我不知道具体在哪里...
所以我的问题是:
我应该在哪里设置断点以便在 EntityFramework 触发任何查询之前停止应用程序?
我已经从 DbContext.ClassToShow 属性 试过了,但它只是第一次停止。
编辑:
我尝试更改绑定的分配方式:
siteBindingSource.DataSource = mDbContext.Site;
至:
var sites = new List<Site>();
var dbSites = mDbContext.Site;
sites.AddRange(dbSites);
siteBindingSource.DataSource = sites;
我还注意到通过数据库实体在 Visual Studio 处搜索会触发数据库查询。
还是同样的问题,如何区分查询数据库的不同地方?
看来数据绑定系统可以多次枚举数据源对象。每个枚举都会再次执行查询。 Entity Framework 查询对象不缓存它们的结果。
因此,您必须具体化查询(例如使用 ToList()
)。
出于错误处理和事务管理的原因,这更好。
我继承了一个带有 EFv4/.net 4.0 的 C# 应用程序。
使用 SQL Server Profiler 分析一些数据库调用我发现一些意外的数据库调用来自应用程序本身(这里没有其他用户,没有其他应用程序或进程混合)。
我遇到这样一种情况,当在带有查询信息的 WinForm 对话框中显示时,两个确切的查询被触发到数据库。 (按照逻辑,我想避免第二次调用……或者至少了解它的来源)。
第一个查询在表单的构造函数中触发,其中数据源绑定到 DbContext.ClassToShow.
但是在显示此表单 (ShowDialog()) 后,第二个查询在 某处 被触发。但我不知道具体在哪里...
所以我的问题是:
我应该在哪里设置断点以便在 EntityFramework 触发任何查询之前停止应用程序?
我已经从 DbContext.ClassToShow 属性 试过了,但它只是第一次停止。
编辑:
我尝试更改绑定的分配方式:
siteBindingSource.DataSource = mDbContext.Site;
至:
var sites = new List<Site>();
var dbSites = mDbContext.Site;
sites.AddRange(dbSites);
siteBindingSource.DataSource = sites;
我还注意到通过数据库实体在 Visual Studio 处搜索会触发数据库查询。
还是同样的问题,如何区分查询数据库的不同地方?
看来数据绑定系统可以多次枚举数据源对象。每个枚举都会再次执行查询。 Entity Framework 查询对象不缓存它们的结果。
因此,您必须具体化查询(例如使用 ToList()
)。
出于错误处理和事务管理的原因,这更好。