由于DbContext已被处置,操作无法完成。 nopcommerce
问题描述:
我得到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();
}
}
答
问题是对象的某些部分应该处置,而它仍然在使用中。
尝试总是解决这样的服务:
protected readonly IRepository<T> _exampleRepository;
要
var _exampleRepository = EngineContext.Current.Resolve<IRepository<T>>();
希望这有助于!
答
我认为您的示例中没有足够的代码。如果您从依赖范围获取ExampleService,它应该完美工作。
所以我的答案是这样的:在构造函数中使用依赖注入而不是使用ResourceLocator。如果你在构造函数中声明了依赖关系,并且仍然有问题,比如没有接收到IRepository的实例,那么你可以确定你是以错误的方式实例化了ExampleService,而不是在autofac范围之外,这是一个确定的原因为了麻烦。
如果ExampleService类被正确注入,而不是由代码创建,我看不出为什么遇到这个问题。实际上,Autofac管理着物体的生命线,防止这样的事情发生。所以我假设您的示例中缺少代码。只需查看您实例化ExampleService的方式。无论如何,这个评论的主要原因是记住你要在构造函数中注入你的依赖,而不是像你那样使用资源定位器。 ResourceLocator是一种足够糟糕的模式,可以尽量避免。显然,在这种情况下,没有理由。 –