Dispose如何与Entity Framework一起使用

时间:2012-10-17 03:04:19

标签: c# .net asp.net-mvc entity-framework

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

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

2 个答案:

答案 0 :(得分:2)

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

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

  

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

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

答案 1 :(得分:2)

在处理非托管资源时,使用

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

MSDN documentation描述了IDisposable以及您实施它的原因。

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