我為每個表單創建背景關系實體并且多個表單可以使用相同的物體保存時如何處理?
uj5u.com熱心網友回復:
DbContext 是您的“視圖狀態”的一部分,旨在讓您訪問資料庫,保存用戶在更改跟蹤器中處理的資料的副本,并將更改重繪 回資料庫。
在智能客戶端應用程式中,DbContext 的自然范圍和生命周期要么是全域的,要么限定為代表任務或用例的 UI 元素。但在任何一種情況下,您都必須防止 DbContext 的更改跟蹤器變得過大或保留資料副本的時間過長,因為即使是單個表單也可以整天保持打開狀態。這些應用程式的一個可能的經驗法則是在每次成功 SaveChanges() 后清除更改跟蹤器。除此之外,當然您必須避免長時間運行的事務,因此 DbContext 不會長時間保持 DbConnection 打開,但無論如何您都必須這樣做。關鍵是具有空更改跟蹤器的 DbContext 可以長期存在。
使用 Short-Lived DbContext 是可能的,但是你失去了 Change Tracker 和 .Local ObservableCollection 的服務,這使得資料系結非常容易。所以這不是靈丹妙藥。
所以關于手頭的問題,如果你有 DbContext-per-form,并且你有物體的表單到表單通信,最終被不同的 DbContext 保存,你真的別無選擇,只能斷開物體與在發送它們之前,它們的主 DbContext。
或者這可能表明這兩個表單確實應該共享一個視圖狀態,您應該創建一個顯式的視圖狀態物件,其中包括 DbContext 和物體,并在表單之間共享這些物件。
看看模型-視圖-視圖模型(MVVM) 模式,它引入了視圖(表單)和視圖模型之間的區別,視圖模型是對用例用戶與應用程式的互動進行建模的資料。這是一種有用的模式,在基于 XAML 的智能客戶端中非常廣泛地使用。此外,XAML(仍然)是智能客戶端應用程式的未來,因此學習它很有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393496.html
上一篇:讓我們不顯示變數的值
