Browse Source

Added includeDetails to repository Get methods.

pull/272/head
Halil İbrahim Kalkan 9 years ago
parent
commit
d682802e50
  1. 14
      src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
  2. 12
      src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs
  3. 33
      src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
  4. 24
      src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
  5. 14
      src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
  6. 12
      src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
  7. 8
      test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs

14
src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs

@ -46,9 +46,9 @@ namespace Volo.Abp.Domain.Repositories
public abstract class BasicRepositoryBase<TEntity, TKey> : BasicRepositoryBase<TEntity>, IBasicRepository<TEntity, TKey> public abstract class BasicRepositoryBase<TEntity, TKey> : BasicRepositoryBase<TEntity>, IBasicRepository<TEntity, TKey>
where TEntity : class, IEntity<TKey> where TEntity : class, IEntity<TKey>
{ {
public virtual TEntity Get(TKey id) public virtual TEntity Get(TKey id, bool includeDetails = true)
{ {
var entity = Find(id); var entity = Find(id, includeDetails);
if (entity == null) if (entity == null)
{ {
@ -58,16 +58,16 @@ namespace Volo.Abp.Domain.Repositories
return entity; return entity;
} }
public virtual Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Get(id)); return Task.FromResult(Get(id, includeDetails));
} }
public abstract TEntity Find(TKey id); public abstract TEntity Find(TKey id, bool includeDetails = true);
public virtual Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Find(id)); return Task.FromResult(Find(id, includeDetails));
} }
public virtual void Delete(TKey id, bool autoSave = false) public virtual void Delete(TKey id, bool autoSave = false)

12
src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs

@ -13,34 +13,38 @@ namespace Volo.Abp.Domain.Repositories
/// Throws <see cref="EntityNotFoundException"/> if can not find an entity with given id. /// Throws <see cref="EntityNotFoundException"/> if can not find an entity with given id.
/// </summary> /// </summary>
/// <param name="id">Primary key of the entity to get</param> /// <param name="id">Primary key of the entity to get</param>
/// <param name="includeDetails">Set true to include all children of this entity</param>
/// <returns>Entity</returns> /// <returns>Entity</returns>
[NotNull] [NotNull]
TEntity Get(TKey id); TEntity Get(TKey id, bool includeDetails = true);
/// <summary> /// <summary>
/// Gets an entity with given primary key. /// Gets an entity with given primary key.
/// Throws <see cref="EntityNotFoundException"/> if can not find an entity with given id. /// Throws <see cref="EntityNotFoundException"/> if can not find an entity with given id.
/// </summary> /// </summary>
/// <param name="id">Primary key of the entity to get</param> /// <param name="id">Primary key of the entity to get</param>
/// <param name="includeDetails">Set true to include all children of this entity</param>
/// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param> /// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param>
/// <returns>Entity</returns> /// <returns>Entity</returns>
[NotNull] [NotNull]
Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default); Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);
/// <summary> /// <summary>
/// Gets an entity with given primary key or null if not found. /// Gets an entity with given primary key or null if not found.
/// </summary> /// </summary>
/// <param name="id">Primary key of the entity to get</param> /// <param name="id">Primary key of the entity to get</param>
/// <param name="includeDetails">Set true to include all children of this entity</param>
/// <returns>Entity or null</returns> /// <returns>Entity or null</returns>
[CanBeNull] [CanBeNull]
TEntity Find(TKey id); TEntity Find(TKey id, bool includeDetails = true);
/// <summary> /// <summary>
/// Gets an entity with given primary key or null if not found. /// Gets an entity with given primary key or null if not found.
/// </summary> /// </summary>
/// <param name="id">Primary key of the entity to get</param> /// <param name="id">Primary key of the entity to get</param>
/// <param name="includeDetails">Set true to include all children of this entity</param>
/// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param> /// <param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken" /> to observe while waiting for the task to complete.</param>
/// <returns>Entity or null</returns> /// <returns>Entity or null</returns>
Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default); Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);
} }
} }

33
src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs

@ -40,13 +40,13 @@ namespace Volo.Abp.Domain.Repositories
{ {
foreach (var entity in GetQueryable().Where(predicate).ToList()) foreach (var entity in GetQueryable().Where(predicate).ToList())
{ {
Delete(entity); Delete(entity, autoSave);
} }
} }
public virtual Task DeleteAsync(Expression<Func<TEntity, bool>> predicate, bool autoSave = false, CancellationToken cancellationToken = default) public virtual Task DeleteAsync(Expression<Func<TEntity, bool>> predicate, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
Delete(predicate); Delete(predicate, autoSave);
return Task.CompletedTask; return Task.CompletedTask;
} }
@ -66,19 +66,26 @@ namespace Volo.Abp.Domain.Repositories
return query; return query;
} }
protected virtual IQueryable<TEntity> IncludeDetails(IQueryable<TEntity> queryable)
{
return queryable;
}
} }
public abstract class RepositoryBase<TEntity, TKey> : RepositoryBase<TEntity>, IRepository<TEntity, TKey> public abstract class RepositoryBase<TEntity, TKey> : RepositoryBase<TEntity>, IRepository<TEntity, TKey>
where TEntity : class, IEntity<TKey> where TEntity : class, IEntity<TKey>
{ {
public virtual TEntity Find(TKey id) public virtual TEntity Find(TKey id, bool includeDetails = true)
{ {
return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id)); return includeDetails
? IncludeDetails(GetQueryable()).FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id))
: GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id));
} }
public virtual TEntity Get(TKey id) public virtual TEntity Get(TKey id, bool includeDetails = true)
{ {
var entity = Find(id); var entity = Find(id, includeDetails);
if (entity == null) if (entity == null)
{ {
@ -88,30 +95,30 @@ namespace Volo.Abp.Domain.Repositories
return entity; return entity;
} }
public virtual Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Get(id)); return Task.FromResult(Get(id, includeDetails));
} }
public virtual Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Find(id)); return Task.FromResult(Find(id, includeDetails));
} }
public virtual void Delete(TKey id, bool autoSave = false) public virtual void Delete(TKey id, bool autoSave = false)
{ {
var entity = Find(id); var entity = Find(id, includeDetails: false);
if (entity == null) if (entity == null)
{ {
return; return;
} }
Delete(entity); Delete(entity, autoSave);
} }
public virtual Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) public virtual Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
Delete(id); Delete(id, autoSave);
return Task.CompletedTask; return Task.CompletedTask;
} }
} }

24
src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs

@ -160,9 +160,9 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
} }
public virtual TEntity Get(TKey id) public virtual TEntity Get(TKey id, bool includeDetails = true)
{ {
var entity = Find(id); var entity = Find(id, includeDetails);
if (entity == null) if (entity == null)
{ {
@ -172,9 +172,9 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
return entity; return entity;
} }
public virtual async Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public virtual async Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
var entity = await FindAsync(id, GetCancellationToken(cancellationToken)); var entity = await FindAsync(id, includeDetails, GetCancellationToken(cancellationToken));
if (entity == null) if (entity == null)
{ {
@ -184,19 +184,23 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
return entity; return entity;
} }
public virtual TEntity Find(TKey id) public virtual TEntity Find(TKey id, bool includeDetails = true)
{ {
return DbSet.Find(id); return includeDetails
? IncludeDetails(DbSet).FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id))
: DbSet.Find(id);
} }
public virtual async Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public virtual async Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken)); return includeDetails
? await IncludeDetails(DbSet).FirstOrDefaultAsync(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id), GetCancellationToken(cancellationToken))
: await DbSet.FindAsync(new object[] { id }, GetCancellationToken(cancellationToken));
} }
public virtual void Delete(TKey id, bool autoSave = false) public virtual void Delete(TKey id, bool autoSave = false)
{ {
var entity = Find(id); var entity = Find(id, includeDetails: false);
if (entity == null) if (entity == null)
{ {
return; return;
@ -207,7 +211,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore
public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default)
{ {
var entity = await FindAsync(id, cancellationToken); var entity = await FindAsync(id, includeDetails: false, cancellationToken: cancellationToken);
if (entity == null) if (entity == null)
{ {
return; return;

14
src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs

@ -73,14 +73,14 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
} }
} }
public virtual TEntity Find(TKey id) public virtual TEntity Find(TKey id, bool includeDetails = true)
{ {
return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id)); return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId<TEntity, TKey>(id));
} }
public virtual TEntity Get(TKey id) public virtual TEntity Get(TKey id, bool includeDetails = true)
{ {
var entity = Find(id); var entity = Find(id, includeDetails);
if (entity == null) if (entity == null)
{ {
@ -90,14 +90,14 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
return entity; return entity;
} }
public virtual Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Get(id)); return Task.FromResult(Get(id, includeDetails));
} }
public virtual Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public virtual Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return Task.FromResult(Find(id)); return Task.FromResult(Find(id, includeDetails));
} }
public virtual void Delete(TKey id, bool autoSave = false) public virtual void Delete(TKey id, bool autoSave = false)

12
src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs

@ -99,9 +99,9 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
} }
public virtual TEntity Get(TKey id) public virtual TEntity Get(TKey id, bool includeDetails = true)
{ {
var entity = Find(id); var entity = Find(id, includeDetails);
if (entity == null) if (entity == null)
{ {
@ -111,9 +111,9 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity; return entity;
} }
public virtual async Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public virtual async Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
var entity = await FindAsync(id, cancellationToken); var entity = await FindAsync(id, includeDetails, cancellationToken);
if (entity == null) if (entity == null)
{ {
@ -123,12 +123,12 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity; return entity;
} }
public virtual async Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public virtual async Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
return await Collection.Find(CreateEntityFilter(id, true)).FirstOrDefaultAsync(cancellationToken); return await Collection.Find(CreateEntityFilter(id, true)).FirstOrDefaultAsync(cancellationToken);
} }
public virtual TEntity Find(TKey id) public virtual TEntity Find(TKey id, bool includeDetails = true)
{ {
return Collection.Find(CreateEntityFilter(id, true)).FirstOrDefault(); return Collection.Find(CreateEntityFilter(id, true)).FirstOrDefault();
} }

8
test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs

@ -259,22 +259,22 @@ namespace Volo.Abp.Domain.Repositories
public class MyTestDefaultRepository<TEntity, TKey> : MyTestDefaultRepository<TEntity>, IRepository<TEntity, TKey> public class MyTestDefaultRepository<TEntity, TKey> : MyTestDefaultRepository<TEntity>, IRepository<TEntity, TKey>
where TEntity : class, IEntity<TKey> where TEntity : class, IEntity<TKey>
{ {
public TEntity Get(TKey id) public TEntity Get(TKey id, bool includeDetails = true)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<TEntity> GetAsync(TKey id, CancellationToken cancellationToken = default) public Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public TEntity Find(TKey id) public TEntity Find(TKey id, bool includeDetails = true)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<TEntity> FindAsync(TKey id, CancellationToken cancellationToken = default) public Task<TEntity> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }

Loading…
Cancel
Save