Skip to content

Commit ae16621

Browse files
authored
Merge pull request #33 from codepb/QueryMethodsNoTracking
Fixing issue with tracking on Query methods, and adding a query with …
2 parents cee11ce + 5d2182e commit ae16621

File tree

4 files changed

+26
-4
lines changed

4 files changed

+26
-4
lines changed

src/DDDToolkit.ApplicationLayer/ApplicationService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ public class ApplicationService<T, TId> : IApplicationService<T, TId>
1212
private IReadableApplicationService<T, TId> _readableApplicationService;
1313
private IWritableApplicationService<T, TId> _writableApplicationService;
1414

15+
protected readonly IUnitOfWork _unitOfWork;
16+
1517
public ApplicationService(IUnitOfWork unitOfWork)
1618
{
19+
_unitOfWork = unitOfWork;
1720
_readableApplicationService = new ReadableApplicationService<T, TId>(unitOfWork);
1821
_writableApplicationService = new WritableApplicationService<T, TId>(unitOfWork);
1922
}

src/DDDToolkit.Core/Repositories/IReadableRepository.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public interface IReadableRepository<T, TId>
1414
Task<IReadOnlyCollection<T>> GetAll(CancellationToken cancellationToken = default(CancellationToken));
1515
Task<IReadOnlyCollection<T>> Query(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken));
1616
Task<IReadOnlyCollection<T>> Query(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken));
17+
Task<IReadOnlyCollection<T>> QueryWithChildren(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken));
18+
Task<IReadOnlyCollection<T>> QueryWithChildren(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken));
1719
Task<T> FirstOrDefault(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken));
1820
Task<T> FirstOrDefault(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken));
1921
Task<T> GetById(TId id, CancellationToken cancellationToken = default(CancellationToken));

src/DDDToolkit.Repository.Sql/ReadableRepository.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ReadableRepository(TContext dbContext) : base(dbContext) { }
2525
protected virtual IQueryable<T> ApplyIncludes(IQueryable<T> query) => query.IncludeEverything();
2626
protected virtual IQueryable<T> Queryable => ApplyIncludes(Set.AsNoTracking());
2727

28-
public Task<IReadOnlyCollection<T>> GetAll(CancellationToken cancellationToken = default(CancellationToken)) => Set.ToListAsync(cancellationToken).ToReadOnlyCollection();
28+
public Task<IReadOnlyCollection<T>> GetAll(CancellationToken cancellationToken = default(CancellationToken)) => Set.AsNoTracking().ToListAsync(cancellationToken).ToReadOnlyCollection();
2929

3030
public Task<T> GetById(TId id, CancellationToken cancellationToken = default(CancellationToken))
3131
{
@@ -38,18 +38,25 @@ public ReadableRepository(TContext dbContext) : base(dbContext) { }
3838
return Queryable.FirstOrDefaultAsync(eLambda, cancellationToken);
3939
}
4040

41+
private Task<IReadOnlyCollection<T>> ExecuteQueryOnQueryable(Expression<Func<T, bool>> query, IQueryable<T> queryable, CancellationToken cancellationToken)
42+
=> queryable.Where(query).ToReadOnlyCollectionAsync(cancellationToken);
43+
4144
public Task<IReadOnlyCollection<T>> Query(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken))
42-
=> Set.Where(query).ToReadOnlyCollectionAsync(cancellationToken);
45+
=> ExecuteQueryOnQueryable(query, Set.AsNoTracking(), cancellationToken);
4346

4447
public Task<IReadOnlyCollection<T>> Query(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken))
4548
=> Query(query.AsExpression(), cancellationToken);
4649

50+
public Task<IReadOnlyCollection<T>> QueryWithChildren(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken))
51+
=> ExecuteQueryOnQueryable(query, Queryable, cancellationToken);
52+
53+
public Task<IReadOnlyCollection<T>> QueryWithChildren(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken))
54+
=> QueryWithChildren(query.AsExpression(), cancellationToken);
55+
4756
public Task<T> FirstOrDefault(Expression<Func<T, bool>> query, CancellationToken cancellationToken = default(CancellationToken))
4857
=> Queryable.FirstOrDefaultAsync(query, cancellationToken);
4958

5059
public Task<T> FirstOrDefault(IQuery<T> query, CancellationToken cancellationToken = default(CancellationToken))
5160
=> FirstOrDefault(query.AsExpression(), cancellationToken);
52-
53-
5461
}
5562
}

src/DDDToolkit.Validation/DDDToolkit.Validation.csproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5+
<Authors>Paul Burgess</Authors>
6+
<Company>Paul Burgess</Company>
7+
<Product>DDDToolkit</Product>
8+
<Description>Validation rules to create validation classes to validate objects.</Description>
9+
<Copyright>Paul Burgess</Copyright>
10+
<PackageLicenseUrl>https://opensource.org/licenses/MIT</PackageLicenseUrl>
11+
<PackageProjectUrl>https://github.com/codepb/DDDToolkit</PackageProjectUrl>
12+
<PackageIconUrl>https://raw.githubusercontent.com/codepb/DDDToolkit/master/logo/logo.png</PackageIconUrl>
13+
<RepositoryUrl>https://github.com/codepb/DDDToolkit</RepositoryUrl>
14+
<PackageTags>DDD, Domain Driven Design, Validation</PackageTags>
515
</PropertyGroup>
616

717
<ItemGroup>

0 commit comments

Comments
 (0)