Tôi được yêu cầu tôi cần dispose of instances of my Entity Framework repository classes và tôi đã tạo một lớp cơ sở để thực thi triển khai này.Tôi có phải triển khai IDisposable trên tất cả các lớp hay là lớp cơ sở đủ không?
Tôi cần kiểm tra với các chuyên gia: có thể chấp nhận thực hiện IDisposable
thông qua lớp cơ sở không?
Lưu ý rằng lớp lưu trữ không có biến thành viên lớp.
/// 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);
}
}
Trong trường hợp của tôi, tôi không có gì cục bộ trong lớp lưu trữ được kế thừa của tôi. Nếu trường hợp này xảy ra, thì việc triển khai CompanyRepository của tôi đã hoàn tất? – LamonteCristo
Nếu không có gì trong lớp dẫn xuất yêu cầu xử lý rõ ràng việc triển khai lớp cơ sở có thể là đủ. –
Chỉ có lớp cơ sở mới thực sự * triển khai * 'IDisposable'. Các lớp có nguồn gốc nói chung nên thêm mã làm sạch của chúng bằng cách ghi đè 'Vứt bỏ (bool)', thay vì thêm một sự thực hiện mới của 'IDisposable.Dispose()'. – supercat