我认为如果您的程序没有,GC会最终调用Dispose,但是您应该在程序中调用Dispose()以使清除确定性.
但是,从我的小测试程序来看,我根本没有看到Dispose被调用....
public class Test : IDisposable
{
static void Main(string[] args)
{
Test s = new Test();
s = null;
GC.Collect();
Console.ReadLine();
}
public Test()
{
Console.WriteLine("Constructor");
}
public void Dispose()
{
Console.WriteLine("Dispose");
}
}
Run Code Online (Sandbox Code Playgroud)
//输出只是"构造函数",我没有像我期望的那样得到"Dispose".这是怎么回事?
编辑:是的,我知道我应该调用Dispose() - 我在使用一次性物体时遵循标准模式.我的问题出现了,因为我试图追踪某些elses代码的漏洞,这是托管C++(另一层复杂性,这将是另一个线程的好主题).
如果这已经得到回答,请道歉,但如果您不使用IOC容器,如何保证每个请求有一个Entity Framework DbContext?(到目前为止,我遇到的答案涉及IOC容器解决方案.)
似乎大多数解决方案都挂钩到HttpContext.Current.Items字典中,但是如何在请求完成时保证处理DbContext?(或者EF的处理不是绝对必要的DbContext吗?)
编辑
我目前正在我的控制器中实例化和处理我的DbContext,但我在ActionFilters和我的MembershipProvider中也有几个单独的DbContext实例(我刚注意到,也有几个验证器).因此,我认为集中我的DbContext的实例化和存储以减少开销可能是个好主意.
asp.net-mvc entity-framework ef-code-first entity-framework-4.1 asp.net-mvc-3