55
66namespace TechInventory . Data . Repository ;
77
8- public class Repository < T > ( InventoryDbContext context ) : IRepository < T > where T : class
8+ public class Repository < T > ( InventoryDbContext context ) : IRepository < T > , IDisposable where T : class
99{
1010 private readonly InventoryDbContext _context = context ;
1111 private readonly DbSet < T > _set = context . Set < T > ( ) ;
12-
12+ private bool _disposed = false ;
13+
1314 public async Task < Result < T > > CreateAsync ( T Entity )
1415 {
1516 await _set . AddAsync ( Entity ) ;
@@ -43,7 +44,7 @@ public virtual async Task<List<T>> GetAllAsync()
4344
4445 public async Task < List < T > > GetWhere ( Expression < Func < T , bool > > filter , string [ ] includes = null )
4546 {
46- IQueryable < T > query = _set ;
47+ IQueryable < T > query = _set . AsNoTracking ( ) ;
4748
4849 if ( filter != null )
4950 query = _set . Where ( filter ) ;
@@ -59,25 +60,40 @@ public async Task<List<T>> GetWhere(Expression<Func<T, bool>> filter, string[] i
5960
6061 public async Task < List < T > > GetWhere ( Expression < Func < T , bool > > filter , string includes )
6162 {
62- IQueryable < T > query = _set ;
63-
64- if ( filter != null )
65- query = _set . Where ( filter ) ;
66-
67- if ( includes != null )
68- query = query . Include ( includes . Trim ( ) ) ;
69-
70- return await query . ToListAsync ( ) ;
63+ return await GetWhere ( filter , new [ ] { includes } ) ;
7164 }
7265
7366 public async Task < T ? > FirstOrDefault ( Expression < Func < T , bool > > filter , string [ ] includes = null )
7467 {
75- IQueryable < T > query = _set ;
68+ IQueryable < T > query = _set . AsNoTracking ( ) ;
7669
7770 if ( includes != null )
71+ {
7872 foreach ( string property in includes )
73+ {
7974 query = query . Include ( property . Trim ( ) ) ;
75+ }
76+ }
8077
81- return await _set . FirstOrDefaultAsync ( filter ) ;
78+ return await query . FirstOrDefaultAsync ( filter ) ;
79+ }
80+
81+ protected virtual void Dispose ( bool disposing )
82+ {
83+ if ( ! _disposed )
84+ {
85+ if ( disposing )
86+ {
87+ // The context is managed by the UnitOfWork, which is managed by the DI container.
88+ // So, we don't dispose it here.
89+ }
90+ _disposed = true ;
91+ }
92+ }
93+
94+ public void Dispose ( )
95+ {
96+ Dispose ( true ) ;
97+ GC . SuppressFinalize ( this ) ;
8298 }
8399}
0 commit comments