假設我的類注入了一個 DbContextFactory,那么我可以寫一個這樣的方法......
private async Task<List<Device>> GetDevices() {
await using AppDbContext ctx = await ContextFactory.CreateDbContextAsync();
return await ctx.Devices.ToListAsync();
}
如果我理解正確,那么當我使用 a 創建背景關系時using,它將在方法結束時被處理掉。
假設我重寫我的方法如下......
private async Task<List<Device>> GetDevices() =>
await (await ContextFactory.CreateDbContextAsync()).Devices.ToListAsync();
在這種情況下,背景關系會被正確處理嗎?
uj5u.com熱心網友回復:
不,您不必丟棄它。有關更多資訊,請參閱本文:https ://blog.jongallant.com/2012/10/do-i-have-to-call-dispose-on-dbcontext/
參考文章:
DbContext 的默認行為是底層連接在需要時自動打開,在不再需要時關閉。例如,當您使用“foreach”執行查詢并遍歷查詢結果時,對 IEnumerable.GetEnumerator() 的呼叫將導致連接打開,當稍后沒有更多可用結果時,“foreach”將負責呼叫Dispose 在列舉器上,這將關閉連接。以類似的方式,對 DbContext.SaveChanges() 的呼叫將在將更改發送到資料庫之前打開連接,并在回傳之前將其關閉。鑒于這種默認行為,在許多實際情況下,離開背景關系而不處置它并僅依賴垃圾收集是無害的。
你重寫的功能很好!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/524938.html
標籤:C#实体框架核心
