我有我的实体框架上下文在一个单独的EL层,它代表实体层,然后我移动到DAL,然后BL和我的用户界面aspx.cs代码页。我很困惑如何在同样的情况下使用一次性的。我到目前为止所做的,假设在我的DAL中我有我的实体的上下文。
namespace abc
{
public class Action: IDisposable
{
Entities context = new Entities();
// all the methods
public void Dispose()
{
context.Dispose();
}
}
}
这样做正确吗?我只是一个天真的程序员,所以请帮助我学习相同的逻辑。
我个人会稍微改变一下,比如:虽然我在实体框架内实现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;
}
}
}
一般来说,是的,您的Dispose
方法应该处理实现IDisposable
的所有资源以及非托管资源(文件等)
Action
方法中创建Context
并在完成后处理它,您可能会获得更好的成功。然后,如果这是你唯一的资源,你根本不需要实现IDisposable
。