[英]C# application to MS SQL database callstack
我繼承了一個帶有 EFv4/.net 4.0 的 C# 應用程序。
使用 SQL Server Profiler 分析一些數據庫調用時,我看到一些來自應用程序本身的意外數據庫調用(沒有其他用戶,沒有其他應用程序或進程在這里混合)。
我有一種情況,當在帶有查詢信息的 WinForm 對話框中顯示時,兩個確切的查詢被觸發到數據庫。 (因為它的邏輯,我想避免第二次調用......或者至少了解它來自哪里)。
第一個查詢在表單的構造函數處觸發,其中 DataSource 綁定到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 中搜索會觸發數據庫查詢。
仍然適用同樣的問題,如何區分查詢數據庫的不同位置?
似乎數據綁定系統可以多次枚舉數據源對象。 每個枚舉都會再次執行查詢。 實體框架查詢對象不緩存其結果。
出於這個原因,您必須具體化查詢(例如使用ToList()
)。
出於錯誤處理和事務管理的原因,這也更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.