我讀到,使用EF Core時,沒有義務使用 using 陳述句DBContext來處理它(或直接呼叫 de Dispose 方法)。垃圾收集器會這樣做。我還讀到,當您閱讀檢索到的物件時,它們也應該處理掉,但我不確定我是否理解正確。這是否意味著如果我toList()通過我的 DbContext 對集合回傳執行操作,我的背景關系將在此時被處理掉?我很難在谷歌上找到這個特定的答案。
uj5u.com熱心網友回復:
Entity Framework 的資源管理不能以這種方式作業。物體框架顯式定義了實體創建時的生命周期,直到實體被處置。在開發框架時,基本目的是存在于單個作業單元中,這就是為什么它非常適合 Web 應用程式,它可以在其他地方使用——但基本用途適合。
您如何配置和確定服務范圍將定義實體的生命周期。但它應遵守以下原則:
典型的作業單元將涉及創建實體、跟蹤在背景關系中定義的物體實體、從查詢回傳、添加或附加到背景關系、對跟蹤的物體進行更改。然后保存所做的更改并將它們寫入資料庫。然后處置實體。
因此,如果您利用以下服務:
public class CustomerAccountService : ICustomerAccountService
{
private bool disposed = false;
private readonly ICustomerRepository repository;
public CustomerAccountService(ICustomerRepository repository) => this.repository = repository;
// Additional logic would go here, including the implementation of the repository which will hold our DbContext.
}
當CustomerAccountService不再限定范圍時,它將開始清理處置并清理物體框架實體,因為一旦服務的生命周期已過期。請記住,依賴注入容器和您的配置將影響它的影響方式。如果可以,您應該始終添加IDispose正確重新分配這些資源的方法。
該檔案明確指出:
使用后處理 DbContext 非常重要。這可以確保釋放任何非托管資源,并確保取消注冊任何事件或其他掛鉤,以防止在實體保持參考的情況下發生記憶體泄漏。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490420.html
標籤:C# asp.net-mvc 实体框架 实体框架核心
