[英]Add new record hangs on WinfForm - and I don't understand why
我繼承了一個 Windows 窗體應用程序。 在嘗試將新記錄保存到 SQL 表時,我們遇到了一些性能問題。 它掛起。
在大多數情況下,我已經排除了數據庫或表結構的問題。 我不相信這里是這種情況。
我對此很陌生,並且無法逐步解決問題並找到問題的根源。
表單基礎:(僅包括我認為相關的代碼,但如果需要可以添加更多)
public partial class frmBadgeCreate : daBaseForm
{
private boBadger_History oBadger_History;
Form mainFormHandler;
private string whome;
}
public frmBadgeCreate(String cutomItem)
{
InitializeComponent();
if (daAppDesktop.IsRunning)
{
oBadger_History = new boBadger_History();
oBadger_History.GetAll(); /// This line right here seems to have some importance
whome = customItem;
}
}
public void saveitall() /// Save Action that hangs
{
// listing of form variables to be saved to table columns
var vlast = textbox_H_lname.Text;
var vfirst = textbox_H_fname.Text;
. . .and on and on . . .
var badger_History = new Badger_History() {hlastname = vlast, vfirstname = vfirst . . . and on and on . . };
oBadger_History.Add(badger_History);
oBadger_History.Save(); /// This is where things just hang forever.
因為這是交給我的“獨行俠應用程序”,所以我很難掌握它。 真正讓我困惑的是,當我注釋掉 'oBadger_History.GetAll()' 行時,保存速度非常快! 即刻。 當我重新添加該行時,它會掛起。 我只知道這一點,因為我花了幾天時間逐條注釋掉每一行,並測試結果。
oBadger_History.GetAll(); 看起來它以某種方式用於自動完成功能,所以它是必需的。
讓我完全摸不着頭腦的是,我看不到“GetAll”和保存之間的聯系。 為什么 getAll 會影響保存功能?
這是 GetAll 代碼,如果這能說明問題的話:
public daBindingList<Badger_History> GetAll()
{
BadgerContext cn = (BadgerContext)this.context;
List<Badger_History> ents = cn.Badger_History.ToList();
this.EntityList = new daBindingList<Badger_History>(ents);
return this.EntityList;
}
同樣,我不認為 SQL 數據庫/表是問題所在,因為我可以通過刪除一行代碼來使保存正常工作。 我似乎無法找到解決方法
這一行:
List<Badger_History> ents = cn.Badger_History.ToList();
將Badger_History
表中的每一行加載到內存中。 這張表有多少條記錄?
如果有很多行,那么當你調用Save();
(我認為這是 SaveChanges() 的某種包裝,然后 EF 將查看每一行是否有任何更改。在您的情況下,可能有 0 行更改,因為您感興趣的是您所在的行添加。
為了加快速度,您可以將數據加載更改為“非跟蹤”查詢
List<Badger_History> ents = cn.Badger_History.AsNoTracking().ToList();
這仍將加載到所有記錄中,但在嘗試保存時將不再計算在內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.