簡體   English   中英

當我在 EF Core 中執行 ToList() 時,是否釋放了 DbContext

[英]Is the DbContext disposed when I do a ToList() in EF Core

我讀到,對於EF Core ,沒有義務使用帶有DBContext的 using 語句來處理它(或直接調用 de Dispose 方法)。 垃圾收集器會這樣做。 我還讀到,當您閱讀檢索到的對象時,它們也應該處理掉,但我不確定我是否理解正確。 這是否意味着如果我對 DbContext 的集合返回執行toList() ,我的上下文將在此時被處理掉? 我很難在谷歌上找到這個特定的答案。

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 非常重要。 這可以確保釋放任何非托管資源,並確保取消注冊任何事件或其他掛鈎,以防止在實例保持引用的情況下發生內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM