我被告知我需要dispose of instances of my Entity Framework repository classes,并且我创建了一个基类来执行此实现。我必须在所有类上实现IDisposable,还是基类足够?
我需要与专家核对:是否可以通过基类实现IDisposable
?
请注意,存储库类没有类成员变量。
/// Sample repository. Note that I return List<T> as IEnumerable,
/// and I use IDisposable
///
public class CompanyRepository : DisposableBase, ICompanyRepository
{
public IEnumerable<CompanyDetail> GetOneCompany(int? CompanyID)
{
var t = from c in _entities.CompanyDetail
where c.CompanyID == CompanyID.Value
select c;
return t.ToList();
}
}
/// <summary>
/// Disposable implementation based on advice from this link:
/// from Http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
/// </summary>
public class DisposableBase : IDisposable
{
protected TLSAdminEntities1 _entities;
public DisposableBase()
{
_entities = new TLSAdminEntities1();
disposed = false;
}
private bool disposed ;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_entities.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
在我的情况下,我的继承库中没有本地的东西。如果是这种情况,那么我的CompanyRepository的实现是完整的? – LamonteCristo
如果派生类中没有任何内容需要显式处置,那么基类实现可能就足够了。 –
只有基类应该实现*'IDisposable'。派生类通常应该通过重写'Dispose(bool)'来添加它们的清除代码,而不是添加'IDisposable.Dispose()'的新实现。 – supercat