2017-02-17 81 views
2

我得到DbContext has been disposed error當我嘗試從數據庫中獲取數據使用下面的代碼提及。
由於DbContext已被處置,操作無法完成。 nopcommerce

如何解決此問題?

public class ExampleService<T> where T : Example 
{ 
    protected readonly IRepository<T> _exampleRepository; 

    public ExampleService() 
    { 
    _exampleRepository= EngineContext.Current.Resolve<IRepository<T>>(); 
    } 

    public IList<T> GetService() 
    { 
    var query = _exampleRepository.Table; 
    return query.ToList(); 
    } 
} 
+0

如果ExampleService類被正確注入,而不是由代碼創建,我看不出爲什麼遇到這個問題。實際上,Autofac管理着物體的生命線,防止這樣的事情發生。所以我假設您的示例中缺少代碼。只需查看您實例化ExampleService的方式。無論如何,這個評論的主要原因是記住你要在構造函數中注入你的依賴,而不是像你那樣使用資源定位器。 ResourceLocator是一種足夠糟糕的模式,可以儘量避免。顯然,在這種情況下,沒有理由。 –

回答

1

問題是對象的某些部分應該處置,而它仍然在使用中。

嘗試總是解決這樣的服務:

protected readonly IRepository<T> _exampleRepository; 

var _exampleRepository = EngineContext.Current.Resolve<IRepository<T>>(); 

希望這有助於!

1

我認爲您的示例中沒有足夠的代碼。如果您從依賴範圍獲取ExampleService,它應該完美工作。

所以我的答案是這樣的:在構造函數中使用依賴注入而不是使用ResourceLocator。如果你在構造函數中聲明瞭依賴關係,並且仍然有問題,比如沒有接收到IRepository的實例,那麼你可以確定你是以錯誤的方式實例化了ExampleService,而不是在autofac範圍之外,這是一個確定的原因爲了麻煩。

相關問題