繁体   English   中英

Dispose如何与实体框架一起使用

[英]How does Dispose work with Entity Framework

有人可以向我解释为什么以及为什么需要使用Dispose()吗? 它是ASP.NET MVC 4附带的默认控制器模板的一部分。当对象(在这种情况下,不再使用数据库中的数据)使用.NET时,是否应该自动启动.NET中的垃圾收集器?

从数据库加载而不是常规对象分配时应使用Dispose()是否正确?

垃圾回收会在任何托管内存资源上自动运行。 但是,有时有些类使用非托管内存或特殊的非内存资源(例如文件句柄)需要释放。

实体框架上下文可以从共享连接池访问连接,并且需要告知它们何时可以放弃这些连接,因为它们将不再使用。

从数据库加载而不是常规对象分配时应使用Dispose()是否正确?

Dispose方法只能由可能使用非托管内存或非内存资源的类实现。 如果某个类确实实现了IDisposable接口,则在完成该对象后,应始终对其调用Dispose

Dispose非托管资源时使用Dispose (可以说是Disposable模式)。 是的,.NET垃圾收集器将清除.NET托管对象,但是数据库连接是不由.NET Framework管理的较低级别的对象。 与文件处理程序相同-在打开/写入文件时使用Dispose模式,因为实际的文件句柄不由.NET管理。

MSDN文档描述了IDisposable以及实现它的原因。

EF之所以使用它,是因为DbContext下面是一个DbDataConnection ,它可以与非托管资源一起使用。 在这些情况下,最好实现IDisposable并相应地处理非托管资源的清理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM