Skip to content

Commit 078cdbc

Browse files
committed
Adding IDisposed on Repository
1 parent 06babd4 commit 078cdbc

1 file changed

Lines changed: 30 additions & 14 deletions

File tree

Data/Repository/Repository.cs

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55

66
namespace 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

Comments
 (0)