嘿,我刚刚学会了如何使用扩展方法,并非常兴奋地在我当前的项目中实现它。如何在静态类中使用dbcontext? (ObjectDisposedException)
我的目标: 我想查一下我的表中是否存在一个辅助类的条目,因为我打算使用它在多个控制器能够确定在我的导航栏显示其导航链接:
我的问题: 我不知道如何来访问我的DbContext在我的静态辅助类。我的dbcontext控制器需要一个参数,我不知道如何通过我的静态类。我认为创建一个新的dbcontext将解决我的范围问题下面解释,但我不明白我可以如何将选项参数传递给我的构造函数。
我的尝试: 薪火ApplicationDbContext作为论据。这适用于我的控制器中的单个方法调用,但在调用多个扩展方法时(要检查用户拥有哪个游戏帐户),我得到一个ObjectDisposedException。
ObjectDisposedException:无法访问处置的对象。造成这种错误的一个常见原因是处理从依赖注入解决的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文中调用Dispose(),或者在使用语句中包装上下文,则可能会发生这种情况。如果您正在使用依赖注入,则应该让依赖注入容器负责处理上下文实例。 对象名称:'ApplicationDbContext'。
从我的理解是一个范围问题,其中第一个方法调用处理上下文,当我试图在下一个调用中使用相同的上下文?我能做些什么来解决这个问题?
我试着读这个链接Cannot access a disposed object in ASP.NET Core when injecting DbContext但它没有帮助我,因为它需要Startup.cs类中的ApplicationBuilder。
解决方案更新 我设置在每一个的DbContext方法调用之后,因为我把它改成一个变量。相反,我直接调用它传递的上下文中,它的工作原理:
感谢大卫和Simon
你是如何调用* *'HasDota2Account()'?你是否传递了一个处理过的'DbContext'? '_context'从哪里来?这个错误似乎表明它在调用'UpdateNavLinks()'之前的确处理了。所以看起来你不应该处理它,或者应该在该方法中使用本地实例化的上下文。试图共享数据上下文对象通常会导致这个问题。 – David
此外,在HasDota2Account数据库是上下文相同的对象;当数据库被处置,所以上下文是。如果尝试在调用HasDota2Account之后使用上下文,它会给出相同的异常。 –
我从我的第一张图片中的控制器调用它。 _context_是我的控制器上的一个字段,在构造函数中得到实例化。我不知道它是否被处置。我不认为我知道如何实例化本地_dbcontext _,因为它需要选项参数,我无法通过外部_of startup.cs_ –