2012-01-27 22 views
0

我有一個WinForms應用程序正在使用實體框架來查詢數據庫。該查詢從表中提取所有記錄以及相關表中的所有記錄。我將父表的結果分配給BindingSource並將其分配給另一個BindingSource以訪問子記錄。父母BindingSource綁定到ComboBox,孩子BindingSource綁定到DataGridView。這一切都按預期工作。刷新包含導航屬性使用ObjectQuery.Execute

我的問題是這樣的:在某個時候,我需要實現刷新功能來從數據庫中拉下所有記錄以刷新視圖。我有這個工作,但它只刷新父記錄,而不是子記錄。

我在獲取所需行爲方面取得的唯一成功是使用ObjectQuery.Execute並使用MergeOption.NoTracking選項。這會刷新父母和孩子的記錄,但如果我沒有弄錯,我會失去所有追蹤記錄。

如何更新兒童記錄?我試圖使用Include方法並指定了子記錄表,但這沒有任何影響。

回答

0

最好的選擇是簡單地創建新的上下文重新綁定您的控件並再次執行查詢。刷新實體主要用於解決併發問題,而不是維護長期生存的環境。

如果你想刷新關係,你必須配置實體集關係來支持刷新。目前,您最有可能只配置當前對象集或對象查詢,它將僅爲主要實體設置行爲:

var principals = context.Principals.Include("Dependents").ToList(); 

context.Principals.MergeOption = MergeOption.OverwriteChanges; 
context.Dependents.MergeOption = MergeOption.OverwriteChanges; 
principals = context.Principals.Include("Dependents").ToList();