我的 .NetCore 6 win 表單應用程式的背景關系生命周期存在一些問題。總而言之,我有一個按鈕,單擊該按鈕會呼叫一個存盤庫,然后該存盤庫會從我的資料庫中檢索一條記錄,并在文本欄位中顯示該記錄中的一個值。這作業正常,直到資料庫中的值發生變化。進一步單擊該按鈕將繼續顯示舊值。
這就是我在 winforms 應用程式中注冊背景關系的方式
services.AddDbContext<MyContext>(b => b.UseSqlServer(connectionString));
然后我這樣注冊我的服務:
services.AddScoped<IMyRepo, MyRepo>();
我想這是一個表單長時間運行并且從不處理背景關系的問題,因此為什么在關閉表單并使用新背景關系重新打開之前結果總是相同的。
我在我的回購協議中每次都使用它來強制一個新結果,但是對于我向資料庫發出的每個請求執行此操作似乎有點任務......
_entities.Entry(log).Reload();
有沒有更簡潔的方法可以做到這一點而無需重新加載?
uj5u.com熱心網友回復:
老實說,我不會將 MS IoC AddDbContext 用于 WinForms/WPF。可能有一種方法可以讓它在某種形式的生命周期范圍內很好地發揮作用,但老實說我不知道??。我也不將它用于 Web 專案,僅僅是因為它將 DbContext 的范圍限定為請求,并且我希望在某些情況下對 DbContext 的生命周期有更多的控制。(例如處理中毒的背景關系)
對于 web 和 WPF,我使用了一個稱為 DbContextScope 的作業單元模式來管理 DbContext 以及與存盤庫的關系。這個想法是消費者使用注入的 DBContextScopeFactory 來創建 DbContextScope(包裝一個或多個 DbContext 實體)并且存盤庫接受注入的 DbContextScopeLocator 以獲得對請求的 DbContextScope 的訪問權限。
最初的 EF6 實作是由 Medhi El Gueddari ( https://github.com/mehdime/DbContextScope || https://www.nuget.org/packages/Mehdime.Entity )
對于 EF 核心 6:(https://www.nuget.org/packages/Zejji.DbContextScope.EFCore6)
或者,如果 DbContext 的范圍可以包含在存盤庫呼叫本身中(跟蹤的物體不需要傳遞到存盤庫之外),那么您也可以只使用注入的 DbContextFactory 類來按需提供 DbContext 實體。像上面這樣的 UoW 模式的優點是您可以控制 DbContext 實體存在的范圍,因此多個操作可以一起提交或回滾。如果需要,DbContext 實體可在多個存盤庫之間使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/533971.html
上一篇:使用字典,如何使用.Maxc#winforms顯示多個最常見的數字
下一篇:專案資源管理從學會向上管理開始
