- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,我最近刚刚学会了如何使用扩展方法,并且很高兴在我当前的项目中实现它。
我的目标:我想检查辅助类中的表中是否存在条目,因为我将在多个 Controller 中使用它,以便能够确定在导航栏中显示哪些导航链接:
我的问题:我不知道如何访问静态帮助器类中的 dbcontext。我的 dbcontext Controller 接受一个我不知道如何传递静态类的参数。我认为创建一个新的 dbcontext 可以解决下面解释的范围问题,但我不知道如何将可选参数传递给构造函数。
我尝试过的:将 ApplicationDbContext 作为参数传递。这适用于我的 Controller 中的单个方法调用,但是当调用多个扩展方法(为了检查用户拥有哪些游戏帐户)时,我得到一个 ObjectDisposeException。
ObjectDisposedException: Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.Object name: 'ApplicationDbContext'.
据我了解,这是一个范围问题,第一个方法调用在完成后会处理上下文,而我试图在下一次调用中使用相同的上下文?我能做些什么来解决这个问题?
我尝试阅读此链接 Cannot access a disposed of object in ASP.NET Core when injecting DbContext但它对我没有帮助,因为它需要 Startup.cs 类中的 ApplicationBuilder。
解决方案更新我在每次方法调用后都会处理 dbcontext,因为我将其放入变量中。相反,我直接在传递的上下文上调用它并且它可以工作:
最佳答案
是的,所以,尽管这些扩展对您来说是新的且 Shiny 的,但这并不意味着您应该将它们用于所有用途。首先,扩展应该与它们所操作的类型有逻辑连接。例如,如果您有一个 string
,那么像 ToUpper()
这样的扩展就很有意义,因为它会修改并返回一个字符串。就像您想要做的那样:仅使用引用的值返回完全外来的类型违反了扩展模式。
其次,扩展不应该与数据库之类的东西交互。特别是在这里,扩展的静态性质与 EF 上下文对象的概念完全不兼容。让它工作的唯一方法是在每次调用扩展时在扩展内部创建一个上下文。这既是搞砸 EF 对象跟踪内容的好方法,也是泄漏内存的好方法。
长话短说,不要这样做。
如果您只是想分解这段代码,您有更好的选择。例如,您实际上可以直接将方法添加到您的上下文中。
public class ApplicationDbContext : DbContext
{
...
public bool HasDota2Account(string id)
{
return Dota2Accounts.Any(m => m.ApplicationUserId == id);
}
}
然后,在您的 Controller 中,您可以简单地执行以下操作:
var hasDota2Account = context.HasDota2Account(User.Identity.GetUserId());
关于c# - 如何在静态类中使用 dbcontext? (对象处置异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432074/
释放 MKMapView 后,我遇到了奇怪的(?)崩溃。 MKMapView 是我的 View Controller 中的 subview ,在我从导航堆栈中删除该 View 并释放它后,应用程序崩溃
我正在尝试使用以下方法处理我的 JFrame: private void killJFrame(JFrame jFrame) { SwingUtilities.invokeLater(() -
我用的是asp net 4.5。 我有 Marker.aspx 页面和页面 Marker.aspx.cs 背后的代码。每当回发发生时,Page_Load 函数将在代码隐藏中触发并创建 GeoMarku
在 C# 中,如 Documentation 中所述, 和 this nice post接受的答案,声明类不继承其父类的析构函数。 问题:如果我想确保释放基类的私有(private)元素,在所有子类中
我想知道是否有人知道如何知道 InheritedWidget 何时被释放? 这个问题的原因是我正在做一些实验,并且我正在使用 InheritedWidget 作为 BLoC 的提供者。此 BLoC 在
如果应用程序意外关闭,如何安全地处理 ReportViewer 对象 Public Shared rv As New Microsoft.Reporting.WinForms.ReportViewe
有没有办法销毁 WebView 实例?如果页面加载,并说视频开始播放,我希望能够,当我隐藏 WebView 时,基本上可以销毁它,或者至少重置它。 我知道我可以听 visibleProperty 并执
在总体情况下,Close 方法在语义上只是更改对象的状态,而该对象可以使用 Open 方法无限期地再次更改。 另一方面,IDisposable.Dispose() 方法的语义将对象置于无法撤消的状态。
我使用StreamResourceInfo.Stream从资源中获取BitmapImage。使用流后 Close 和 Dispose 是否正确?我问这个问题是因为在内存分析器中,如果这样做我会收到错误
我正在编写一个程序,显示在屏幕上移动的图像,但是对于作业,我必须使用drawImage方法。我创建一个名为turtle的新图像,然后在一个点绘制该图像,然后在稍后的时间点再次绘制它,但是,第一个绘制的
这个问题在这里已经有了答案: Do you need to dispose of objects and set them to null? (12 个答案) 关闭 4 年前。 我在我的代码中使用
我有一个使用 Entity Framework 的 MVC 3 应用程序,我在其中设置了自定义角色提供程序。 我的角色提供者依赖于一个存储库,而该存储库依赖于 DbContext。 我在应用程序启动方
我正在尝试创建处理整个 BST 的迭代方法。 通过函数 insert_nodes 插入节点后,我没有得到预期的输出。 它应该打印如下内容:left,right, #nr #nr #nr 对于数字 5,
我正在使用 MemoryAppender 来读取单元测试中的日志消息。 我按以下方式使用 BasicConfigurator: class LogVerifier { pr
谁能给出一个完整的例子来说明 qooxdoo 1.6 中的 dispose 和 destruct 是如何工作的? ,我在 qooxdoo 演示或文档中找不到任何好的示例。 谢谢你的建议。 最佳答案 处
我在处理屏幕时遇到问题。当我尝试处置 OrthogonalTiledMapRenderer 时,收到此错误消息。我在网上查了一下,没有发现任何其他这样的例子或发生这种情况的情况。 Exception
我正在使用匿名方法来处理 COM 对象中的事件。程序终止后,我在匿名方法中使用的资源似乎没有被“正确关闭”,因为我正在观看的每个资源都会出现第一次机会异常 (InvalidComObjectExcep
我有一个用 C# 编写的方法,它接受一个包含 XML 文档的字符串和一个 XSD 流数组。字符串文档根据 XSD 进行验证: private static XmlValidationResult Va
有没有办法“清理”您创建的对象和其他变量?还是它们会自动处理掉,或者我的整个概念都错了?这样做的正确方法是什么?我尽量避免 GC。 最佳答案 在没有内存管理的 GC 语言中,唯一的清理方法是 GC 。
当您在 ASP.Net 框架中创建和使用 Web 服务代理类时,该类最终继承自 Component,后者实现了 IDisposable。 我从未在网上看到过人们处理 Web 代理类的例子,但想知道是否
我是一名优秀的程序员,十分优秀!