我将实体框架上下文放在一个单独的EL层中,它代表实体层,然后我转移到DAL,然后是BL和我的用户界面aspx.cs代码页。 我很困惑,如此使用IDisposable相同。 到目前为止我在做什么,在我的DAL中提供了我的实体背景。
namespace abc
{
public class Action: IDisposable
{
Entities context = new Entities();
// all the methods
public void Dispose()
{
context.Dispose();
}
}
}
这样做是否正确? 我只是一个天真的程序员,所以帮助我学习相同的逻辑。
答案 0 :(得分:4)
就我个人而言,我会稍微改变它,例如:
虽然我在实体框架中实施IDisposable
的经验很少。
namespace abc
{
public class Action: IDisposable
{
private bool _disposed;
Entities context= new Entities();
// all the methods
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
context.Dispose();
// Dispose other managed resources.
}
//release unmanaged resources.
}
_disposed = true;
}
}
}
答案 1 :(得分:2)
通常,是的,您的Dispose
方法应该处理实现IDisposable
的所有资源以及非托管资源(文件等)
然而,作为资源保持EF上下文通常不是一个好的设计。如果您在Context
方法中创建Action
并在完成后处置它,您可能会获得更好的成功。然后,如果这是您唯一的资源,则无需实施IDisposable
。