簡體   English   中英

添加新記錄在 WinfForm 上掛起 - 我不明白為什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM