diff --git a/src/AbpDesk/AbpDesk.Application/AbpDesk/Tickets/TicketAppService.cs b/src/AbpDesk/AbpDesk.Application/AbpDesk/Tickets/TicketAppService.cs index dcc897d516..3767772a21 100644 --- a/src/AbpDesk/AbpDesk.Application/AbpDesk/Tickets/TicketAppService.cs +++ b/src/AbpDesk/AbpDesk.Application/AbpDesk/Tickets/TicketAppService.cs @@ -12,11 +12,11 @@ namespace AbpDesk.Tickets { public class TicketAppService : ApplicationService, ITicketAppService { - private readonly IQueryableRepository _ticketRepository; + private readonly IRepository _ticketRepository; private readonly IAsyncQueryableExecuter _asyncQueryableExecuter; public TicketAppService( - IQueryableRepository ticketRepository, + IRepository ticketRepository, IAsyncQueryableExecuter asyncQueryableExecuter) { _ticketRepository = ticketRepository; diff --git a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/BlogPostLister.cs b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/BlogPostLister.cs index c0bf2e9556..a7be728c40 100644 --- a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/BlogPostLister.cs +++ b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/BlogPostLister.cs @@ -9,11 +9,11 @@ namespace AbpDesk.ConsoleDemo { public class BlogPostLister : ITransientDependency { - private readonly IQueryableRepository _blogPostRepository; + private readonly IRepository _blogPostRepository; private readonly IGuidGenerator _guidGenerator; public BlogPostLister( - IQueryableRepository blogPostRepository, + IRepository blogPostRepository, IGuidGenerator guidGenerator) { _blogPostRepository = blogPostRepository; diff --git a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/UserLister.cs b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/UserLister.cs index 46b038c511..2aa8f30245 100644 --- a/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/UserLister.cs +++ b/src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/UserLister.cs @@ -11,11 +11,11 @@ namespace AbpDesk.ConsoleDemo public class UserLister : ITransientDependency { private readonly IdentityUserManager _userManager; - private readonly IQueryableRepository _userRepository; + private readonly IRepository _userRepository; public UserLister( IdentityUserManager userManager, - IQueryableRepository userRepository) + IRepository userRepository) { _userManager = userManager; _userRepository = userRepository; diff --git a/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs b/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs index 90e0b6b1cc..7636bb19b4 100644 --- a/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs +++ b/src/AbpDesk/AbpDesk.MongoBlog/AbpDesk/Blogging/AbpDeskMongoBlogModule.cs @@ -47,7 +47,7 @@ namespace AbpDesk.Blogging using (var uow = scope.ServiceProvider.GetRequiredService().Begin()) { - var blogPostRepository = scope.ServiceProvider.GetRequiredService>(); + var blogPostRepository = scope.ServiceProvider.GetRequiredService>(); if (blogPostRepository.Any()) { logger.LogInformation($"No need to seed database since there are already {blogPostRepository.Count()} blog posts!"); diff --git a/src/AbpDesk/AbpDesk.MongoBlog/Areas/Blog/Controllers/PostsController.cs b/src/AbpDesk/AbpDesk.MongoBlog/Areas/Blog/Controllers/PostsController.cs index c38b7a9c2c..dcd44efa0f 100644 --- a/src/AbpDesk/AbpDesk.MongoBlog/Areas/Blog/Controllers/PostsController.cs +++ b/src/AbpDesk/AbpDesk.MongoBlog/Areas/Blog/Controllers/PostsController.cs @@ -10,9 +10,9 @@ namespace Areas.Blog.Controllers [Area("Blog")] public class PostsController : AbpController { - private readonly IQueryableRepository _blogPostRepository; + private readonly IRepository _blogPostRepository; - public PostsController(IQueryableRepository blogPostRepository) + public PostsController(IRepository blogPostRepository) { _blogPostRepository = blogPostRepository; } diff --git a/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll b/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll index e75d37d1ba..9fbb3846a6 100644 Binary files a/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll and b/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll differ diff --git a/src/Volo.Abp.Ddd/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/src/Volo.Abp.Ddd/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index e6203386ae..7ef9838f18 100644 --- a/src/Volo.Abp.Ddd/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/src/Volo.Abp.Ddd/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -12,7 +12,7 @@ namespace Microsoft.Extensions.DependencyInjection public static IServiceCollection AddDefaultRepository(this IServiceCollection services, Type entityType, Type repositoryImplementationType) { //IRepository - var repositoryInterfaceWithoutPk = typeof(IRepository<>).MakeGenericType(entityType); + var repositoryInterfaceWithoutPk = typeof(IBasicRepository<>).MakeGenericType(entityType); if (!repositoryInterfaceWithoutPk.IsAssignableFrom(repositoryImplementationType)) { throw new AbpException($"Given repositoryImplementationType ({repositoryImplementationType}) must implement {repositoryInterfaceWithoutPk}"); @@ -21,7 +21,7 @@ namespace Microsoft.Extensions.DependencyInjection services.TryAddTransient(repositoryInterfaceWithoutPk, repositoryImplementationType); //IQueryableRepository - var queryableRepositoryInterfaceWithPk = typeof(IQueryableRepository<>).MakeGenericType(entityType); + var queryableRepositoryInterfaceWithPk = typeof(IRepository<>).MakeGenericType(entityType); if (repositoryInterfaceWithoutPk.IsAssignableFrom(repositoryImplementationType)) { services.TryAddTransient(queryableRepositoryInterfaceWithPk, repositoryImplementationType); @@ -32,14 +32,14 @@ namespace Microsoft.Extensions.DependencyInjection if (primaryKeyType != null) { //IRepository - var repositoryInterface = typeof(IRepository<,>).MakeGenericType(entityType, primaryKeyType); + var repositoryInterface = typeof(IBasicRepository<,>).MakeGenericType(entityType, primaryKeyType); if (repositoryInterface.GetTypeInfo().IsAssignableFrom(repositoryImplementationType)) { services.TryAddTransient(repositoryInterface, repositoryImplementationType); } //IQueryableRepository - var queryableRepositoryInterface = typeof(IQueryableRepository<,>).MakeGenericType(entityType, primaryKeyType); + var queryableRepositoryInterface = typeof(IRepository<,>).MakeGenericType(entityType, primaryKeyType); if (queryableRepositoryInterface.GetTypeInfo().IsAssignableFrom(repositoryImplementationType)) { services.TryAddTransient(queryableRepositoryInterface, repositoryImplementationType); diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/AsyncCrudAppService.cs b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/AsyncCrudAppService.cs index bbd4a8eaeb..108b73b1ba 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/AsyncCrudAppService.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/AsyncCrudAppService.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected AsyncCrudAppService(IQueryableRepository repository) + protected AsyncCrudAppService(IRepository repository) : base(repository) { @@ -24,7 +24,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected AsyncCrudAppService(IQueryableRepository repository) + protected AsyncCrudAppService(IRepository repository) : base(repository) { @@ -38,7 +38,7 @@ namespace Volo.Abp.Application.Services where TEntityDto : IEntityDto where TCreateInput : IEntityDto { - protected AsyncCrudAppService(IQueryableRepository repository) + protected AsyncCrudAppService(IRepository repository) : base(repository) { @@ -53,7 +53,7 @@ namespace Volo.Abp.Application.Services { public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; } - protected AsyncCrudAppService(IQueryableRepository repository) + protected AsyncCrudAppService(IRepository repository) :base(repository) { AsyncQueryableExecuter = DefaultAsyncQueryableExecuter.Instance; diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppService.cs b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppService.cs index 367552dba0..68618a553e 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppService.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppService.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected CrudAppService(IQueryableRepository repository) + protected CrudAppService(IRepository repository) : base(repository) { @@ -22,7 +22,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected CrudAppService(IQueryableRepository repository) + protected CrudAppService(IRepository repository) : base(repository) { @@ -35,7 +35,7 @@ namespace Volo.Abp.Application.Services where TEntityDto : IEntityDto where TCreateInput : IEntityDto { - protected CrudAppService(IQueryableRepository repository) + protected CrudAppService(IRepository repository) : base(repository) { @@ -48,7 +48,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected CrudAppService(IQueryableRepository repository) + protected CrudAppService(IRepository repository) : base(repository) { diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppServiceBase.cs b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppServiceBase.cs index b9ad25a574..0e7e37dcab 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppServiceBase.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/CrudAppServiceBase.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Application.Services where TEntity : class, IEntity where TEntityDto : IEntityDto { - protected IQueryableRepository Repository { get; } + protected IRepository Repository { get; } protected virtual string GetPermissionName { get; set; } @@ -27,7 +27,7 @@ namespace Volo.Abp.Application.Services protected virtual string DeletePermissionName { get; set; } - protected CrudAppServiceBase(IQueryableRepository repository) + protected CrudAppServiceBase(IRepository repository) { Repository = repository; } diff --git a/src/Volo.Abp.Ddd/Volo/Abp/DependencyInjection/CommonDbContextRegistrationOptions.cs b/src/Volo.Abp.Ddd/Volo/Abp/DependencyInjection/CommonDbContextRegistrationOptions.cs index 917e9bd57a..3ad73cca1c 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/DependencyInjection/CommonDbContextRegistrationOptions.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/DependencyInjection/CommonDbContextRegistrationOptions.cs @@ -107,9 +107,9 @@ namespace Volo.Abp.DependencyInjection throw new AbpException($"Given entityType is not an entity: {entityType.AssemblyQualifiedName}. It must implement {typeof(IEntity<>).AssemblyQualifiedName}."); } - if (!ReflectionHelper.IsAssignableToGenericType(repositoryType, typeof(IRepository<>))) + if (!ReflectionHelper.IsAssignableToGenericType(repositoryType, typeof(IBasicRepository<>))) { - throw new AbpException($"Given repositoryType is not a repository: {entityType.AssemblyQualifiedName}. It must implement {typeof(IRepository<>).AssemblyQualifiedName}."); + throw new AbpException($"Given repositoryType is not a repository: {entityType.AssemblyQualifiedName}. It must implement {typeof(IBasicRepository<>).AssemblyQualifiedName}."); } CustomRepositories[entityType] = repositoryType; diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs new file mode 100644 index 0000000000..5870aeef06 --- /dev/null +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -0,0 +1,90 @@ +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Threading; + +namespace Volo.Abp.Domain.Repositories +{ + public abstract class BasicRepositoryBase : IBasicRepository + where TEntity : class, IEntity + { + public ICancellationTokenProvider CancellationTokenProvider { get; set; } + + protected BasicRepositoryBase() + { + CancellationTokenProvider = NullCancellationTokenProvider.Instance; + } + + public abstract TEntity Insert(TEntity entity, bool autoSave = false); + + public virtual Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + { + return Task.FromResult(Insert(entity, autoSave)); + } + + public abstract TEntity Update(TEntity entity); + + public virtual Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default) + { + return Task.FromResult(Update(entity)); + } + + public abstract void Delete(TEntity entity); + + public virtual Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) + { + Delete(entity); + return Task.CompletedTask; + } + + protected virtual CancellationToken GetCancellationToken(CancellationToken prefferedValue = default) + { + return CancellationTokenProvider.FallbackToProvider(prefferedValue); + } + } + + public abstract class BasicRepositoryBase : BasicRepositoryBase, IBasicRepository + where TEntity : class, IEntity + { + public virtual TEntity Get(TKey id) + { + var entity = Find(id); + + if (entity == null) + { + throw new EntityNotFoundException(typeof(TEntity), id); + } + + return entity; + } + + public virtual Task GetAsync(TKey id, CancellationToken cancellationToken = default) + { + return Task.FromResult(Get(id)); + } + + public abstract TEntity Find(TKey id); + + public virtual Task FindAsync(TKey id, CancellationToken cancellationToken = default) + { + return Task.FromResult(Find(id)); + } + + public virtual void Delete(TKey id) + { + var entity = Find(id); + if (entity == null) + { + return; + } + + Delete(entity); + } + + public virtual Task DeleteAsync(TKey id, CancellationToken cancellationToken = default) + { + Delete(id); + return Task.CompletedTask; + } + } +} diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IBasicRepository.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IBasicRepository.cs new file mode 100644 index 0000000000..91984a1848 --- /dev/null +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IBasicRepository.cs @@ -0,0 +1,114 @@ +using System.Threading; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Domain.Repositories +{ + public interface IBasicRepository : IRepository + where TEntity : class, IEntity + { + /// + /// Inserts a new entity. + /// + /// Inserted entity + /// + /// Set true to automatically save changes to database. + /// This can be used to set database generated Id of an entity for some ORMs (like Entity Framework). + /// + [NotNull] + TEntity Insert([NotNull] TEntity entity, bool autoSave = false); + + /// + /// Inserts a new entity. + /// + /// + /// Set true to automatically save changes to database. + /// This can be used to set database generated Id of an entity for some ORMs (like Entity Framework). + /// + /// A to observe while waiting for the task to complete. + /// Inserted entity + [NotNull] + Task InsertAsync([NotNull] TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default); + + /// + /// Updates an existing entity. + /// + /// Entity + [NotNull] + TEntity Update([NotNull] TEntity entity); + + /// + /// Updates an existing entity. + /// + /// A to observe while waiting for the task to complete. + /// Entity + [NotNull] + Task UpdateAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default); + + /// + /// Deletes an entity. + /// + /// Entity to be deleted + void Delete([NotNull] TEntity entity); //TODO: Return true if deleted + + /// + /// Deletes an entity. + /// + /// A to observe while waiting for the task to complete. + /// Entity to be deleted + Task DeleteAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default); //TODO: Return true if deleted + } + + public interface IBasicRepository : IBasicRepository + where TEntity : class, IEntity + { + /// + /// Gets an entity with given primary key. + /// Throws if can not find an entity with given id. + /// + /// Primary key of the entity to get + /// Entity + [NotNull] + TEntity Get(TKey id); + + /// + /// Gets an entity with given primary key. + /// Throws if can not find an entity with given id. + /// + /// Primary key of the entity to get + /// A to observe while waiting for the task to complete. + /// Entity + [NotNull] + Task GetAsync(TKey id, CancellationToken cancellationToken = default); + + /// + /// Gets an entity with given primary key or null if not found. + /// + /// Primary key of the entity to get + /// Entity or null + [CanBeNull] + TEntity Find(TKey id); + + /// + /// Gets an entity with given primary key or null if not found. + /// + /// Primary key of the entity to get + /// A to observe while waiting for the task to complete. + /// Entity or null + Task FindAsync(TKey id, CancellationToken cancellationToken = default); + + /// + /// Deletes an entity by primary key. + /// + /// Primary key of the entity + void Delete(TKey id); //TODO: Return true if deleted + + /// + /// Deletes an entity by primary key. + /// + /// A to observe while waiting for the task to complete. + /// Primary key of the entity + Task DeleteAsync(TKey id, CancellationToken cancellationToken = default); //TODO: Return true if deleted + } +} diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IQueryableRepository.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IQueryableRepository.cs deleted file mode 100644 index 52014849ad..0000000000 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IQueryableRepository.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Linq; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Volo.Abp.Domain.Entities; - -namespace Volo.Abp.Domain.Repositories -{ - public interface IQueryableRepository : IRepository, IQueryable - where TEntity : class, IEntity - { - /// - /// Deletes many entities by function. - /// Notice that: All entities fits to given predicate are retrieved and deleted. - /// This may cause major performance problems if there are too many entities with - /// given predicate. - /// - /// A condition to filter entities - void Delete([NotNull] Expression> predicate); - - /// - /// Deletes many entities by function. - /// Notice that: All entities fits to given predicate are retrieved and deleted. - /// This may cause major performance problems if there are too many entities with - /// given predicate. - /// - /// A to observe while waiting for the task to complete. - /// A condition to filter entities - Task DeleteAsync([NotNull] Expression> predicate, CancellationToken cancellationToken = default); - } - - public interface IQueryableRepository : IQueryableRepository, IRepository - where TEntity : class, IEntity - { - } -} \ No newline at end of file diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IRepository.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IRepository.cs index 94521c7628..e927334b26 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IRepository.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/IRepository.cs @@ -1,4 +1,7 @@ -using System.Threading; +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; using Volo.Abp.DependencyInjection; @@ -14,110 +17,31 @@ namespace Volo.Abp.Domain.Repositories } - public interface IRepository : IRepository + public interface IRepository : IBasicRepository, IQueryable where TEntity : class, IEntity { /// - /// Inserts a new entity. + /// Deletes many entities by function. + /// Notice that: All entities fits to given predicate are retrieved and deleted. + /// This may cause major performance problems if there are too many entities with + /// given predicate. /// - /// Inserted entity - /// - /// Set true to automatically save changes to database. - /// This can be used to set database generated Id of an entity for some ORMs (like Entity Framework). - /// - [NotNull] - TEntity Insert([NotNull] TEntity entity, bool autoSave = false); + /// A condition to filter entities + void Delete([NotNull] Expression> predicate); /// - /// Inserts a new entity. + /// Deletes many entities by function. + /// Notice that: All entities fits to given predicate are retrieved and deleted. + /// This may cause major performance problems if there are too many entities with + /// given predicate. /// - /// - /// Set true to automatically save changes to database. - /// This can be used to set database generated Id of an entity for some ORMs (like Entity Framework). - /// /// A to observe while waiting for the task to complete. - /// Inserted entity - [NotNull] - Task InsertAsync([NotNull] TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default); - - /// - /// Updates an existing entity. - /// - /// Entity - [NotNull] - TEntity Update([NotNull] TEntity entity); - - /// - /// Updates an existing entity. - /// - /// A to observe while waiting for the task to complete. - /// Entity - [NotNull] - Task UpdateAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default); - - /// - /// Deletes an entity. - /// - /// Entity to be deleted - void Delete([NotNull] TEntity entity); //TODO: Return true if deleted - - /// - /// Deletes an entity. - /// - /// A to observe while waiting for the task to complete. - /// Entity to be deleted - Task DeleteAsync([NotNull] TEntity entity, CancellationToken cancellationToken = default); //TODO: Return true if deleted + /// A condition to filter entities + Task DeleteAsync([NotNull] Expression> predicate, CancellationToken cancellationToken = default); } - public interface IRepository : IRepository + public interface IRepository : IRepository, IBasicRepository where TEntity : class, IEntity { - /// - /// Gets an entity with given primary key. - /// Throws if can not find an entity with given id. - /// - /// Primary key of the entity to get - /// Entity - [NotNull] - TEntity Get(TKey id); - - /// - /// Gets an entity with given primary key. - /// Throws if can not find an entity with given id. - /// - /// Primary key of the entity to get - /// A to observe while waiting for the task to complete. - /// Entity - [NotNull] - Task GetAsync(TKey id, CancellationToken cancellationToken = default); - - /// - /// Gets an entity with given primary key or null if not found. - /// - /// Primary key of the entity to get - /// Entity or null - [CanBeNull] - TEntity Find(TKey id); - - /// - /// Gets an entity with given primary key or null if not found. - /// - /// Primary key of the entity to get - /// A to observe while waiting for the task to complete. - /// Entity or null - Task FindAsync(TKey id, CancellationToken cancellationToken = default); - - /// - /// Deletes an entity by primary key. - /// - /// Primary key of the entity - void Delete(TKey id); //TODO: Return true if deleted - - /// - /// Deletes an entity by primary key. - /// - /// A to observe while waiting for the task to complete. - /// Primary key of the entity - Task DeleteAsync(TKey id, CancellationToken cancellationToken = default); //TODO: Return true if deleted } -} +} \ No newline at end of file diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/QueryableRepositoryBase.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/QueryableRepositoryBase.cs deleted file mode 100644 index f7000714e0..0000000000 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/QueryableRepositoryBase.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; -using Volo.Abp.Domain.Entities; -using Volo.Abp.MultiTenancy; - -namespace Volo.Abp.Domain.Repositories -{ - public abstract class QueryableRepositoryBase : RepositoryBase, IQueryableRepository - where TEntity : class, IEntity - { - public IDataFilter DataFilter { get; set; } - - public ICurrentTenant CurrentTenant { get; set; } - - public virtual Type ElementType => GetQueryable().ElementType; - - public virtual Expression Expression => GetQueryable().Expression; - - public virtual IQueryProvider Provider => GetQueryable().Provider; - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public IEnumerator GetEnumerator() - { - return GetQueryable().GetEnumerator(); - } - - protected abstract IQueryable GetQueryable(); - - public virtual void Delete(Expression> predicate) - { - foreach (var entity in GetQueryable().Where(predicate).ToList()) - { - Delete(entity); - } - } - - public virtual Task DeleteAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - Delete(predicate); - return Task.CompletedTask; - } - - //TODO: Is that needed..? - protected virtual IQueryable ApplyDataFilters(IQueryable query) - { - if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) - { - query = query.WhereIf(DataFilter.IsEnabled(), e => ((ISoftDelete)e).IsDeleted == false); - } - - if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))) - { - var tenantId = CurrentTenant.Id; - query = query.WhereIf(DataFilter.IsEnabled(), e => ((IMultiTenant)e).TenantId == tenantId); - } - - return query; - } - } - - public abstract class QueryableRepositoryBase : QueryableRepositoryBase, IQueryableRepository - where TEntity : class, IEntity - { - public virtual TEntity Find(TKey id) - { - return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId(id)); - } - - public virtual TEntity Get(TKey id) - { - var entity = Find(id); - - if (entity == null) - { - throw new EntityNotFoundException(typeof(TEntity), id); - } - - return entity; - } - - public virtual Task GetAsync(TKey id, CancellationToken cancellationToken = default) - { - return Task.FromResult(Get(id)); - } - - public virtual Task FindAsync(TKey id, CancellationToken cancellationToken = default) - { - return Task.FromResult(Find(id)); - } - - public virtual void Delete(TKey id) - { - var entity = Find(id); - if (entity == null) - { - return; - } - - Delete(entity); - } - - public virtual Task DeleteAsync(TKey id, CancellationToken cancellationToken = default) - { - Delete(id); - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs index 953b967c2c..b716142436 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -1,51 +1,81 @@ -using System.Threading; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading; using System.Threading.Tasks; +using Volo.Abp.Data; using Volo.Abp.Domain.Entities; -using Volo.Abp.Threading; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.Domain.Repositories { - public abstract class RepositoryBase : IRepository + public abstract class RepositoryBase : BasicRepositoryBase, IRepository where TEntity : class, IEntity { - public ICancellationTokenProvider CancellationTokenProvider { get; set; } + public IDataFilter DataFilter { get; set; } - protected RepositoryBase() + public ICurrentTenant CurrentTenant { get; set; } + + public virtual Type ElementType => GetQueryable().ElementType; + + public virtual Expression Expression => GetQueryable().Expression; + + public virtual IQueryProvider Provider => GetQueryable().Provider; + + IEnumerator IEnumerable.GetEnumerator() { - CancellationTokenProvider = NullCancellationTokenProvider.Instance; + return GetEnumerator(); } - public abstract TEntity Insert(TEntity entity, bool autoSave = false); - - public virtual Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public IEnumerator GetEnumerator() { - return Task.FromResult(Insert(entity, autoSave)); + return GetQueryable().GetEnumerator(); } - public abstract TEntity Update(TEntity entity); + protected abstract IQueryable GetQueryable(); - public virtual Task UpdateAsync(TEntity entity, CancellationToken cancellationToken = default) + public virtual void Delete(Expression> predicate) { - return Task.FromResult(Update(entity)); + foreach (var entity in GetQueryable().Where(predicate).ToList()) + { + Delete(entity); + } } - public abstract void Delete(TEntity entity); - - public virtual Task DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) + public virtual Task DeleteAsync(Expression> predicate, CancellationToken cancellationToken = default) { - Delete(entity); + Delete(predicate); return Task.CompletedTask; } - protected virtual CancellationToken GetCancellationToken(CancellationToken prefferedValue = default) + //TODO: Is that needed..? + protected virtual IQueryable ApplyDataFilters(IQueryable query) { - return CancellationTokenProvider.FallbackToProvider(prefferedValue); + if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) + { + query = query.WhereIf(DataFilter.IsEnabled(), e => ((ISoftDelete)e).IsDeleted == false); + } + + if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))) + { + var tenantId = CurrentTenant.Id; + query = query.WhereIf(DataFilter.IsEnabled(), e => ((IMultiTenant)e).TenantId == tenantId); + } + + return query; } } public abstract class RepositoryBase : RepositoryBase, IRepository where TEntity : class, IEntity { + public virtual TEntity Find(TKey id) + { + return GetQueryable().FirstOrDefault(EntityHelper.CreateEqualityExpressionForId(id)); + } + public virtual TEntity Get(TKey id) { var entity = Find(id); @@ -63,8 +93,6 @@ namespace Volo.Abp.Domain.Repositories return Task.FromResult(Get(id)); } - public abstract TEntity Find(TKey id); - public virtual Task FindAsync(TKey id, CancellationToken cancellationToken = default) { return Task.FromResult(Find(id)); @@ -87,4 +115,4 @@ namespace Volo.Abp.Domain.Repositories return Task.CompletedTask; } } -} +} \ No newline at end of file diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs index ccb4cd2c60..029ee5cd3c 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Repositories public static class RepositoryExtensions { public static async Task EnsureCollectionLoadedAsync( - this IRepository repository, + this IBasicRepository repository, TEntity entity, Expression>> propertyExpression, CancellationToken cancellationToken = default @@ -28,7 +28,7 @@ namespace Volo.Abp.Domain.Repositories } public static void EnsureCollectionLoaded( - this IRepository repository, + this IBasicRepository repository, TEntity entity, Expression>> propertyExpression ) @@ -39,7 +39,7 @@ namespace Volo.Abp.Domain.Repositories } public static async Task EnsurePropertyLoadedAsync( - this IRepository repository, + this IBasicRepository repository, TEntity entity, Expression> propertyExpression, CancellationToken cancellationToken = default @@ -55,7 +55,7 @@ namespace Volo.Abp.Domain.Repositories } public static void EnsurePropertyLoaded( - this IRepository repository, + this IBasicRepository repository, TEntity entity, Expression> propertyExpression ) diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs index 33f34a79bf..a76136dc7b 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs @@ -7,19 +7,19 @@ namespace Volo.Abp.Domain.Repositories { public static class EfCoreRepositoryExtensions { - public static DbContext GetDbContext(this IRepository repository) + public static DbContext GetDbContext(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbContext; } - public static DbSet GetDbSet(this IRepository repository) + public static DbSet GetDbSet(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbSet; } - public static IEfCoreRepository ToEfCoreRepository(this IRepository repository) + public static IEfCoreRepository ToEfCoreRepository(this IBasicRepository repository) where TEntity : class, IEntity { var efCoreRepository = repository as IEfCoreRepository; diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 322096084d..d30bd6115e 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -10,7 +10,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { - public class EfCoreRepository : QueryableRepositoryBase, IEfCoreRepository + public class EfCoreRepository : RepositoryBase, IEfCoreRepository where TDbContext : IEfCoreDbContext where TEntity : class, IEntity { diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs index b0354df4c9..31a78f744d 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs @@ -3,7 +3,7 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { - public interface IEfCoreRepository : IQueryableRepository + public interface IEfCoreRepository : IRepository where TEntity : class, IEntity { DbContext DbContext { get; } @@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore DbSet DbSet { get; } } - public interface IEfCoreRepository : IEfCoreRepository, IQueryableRepository + public interface IEfCoreRepository : IEfCoreRepository, IRepository where TEntity : class, IEntity { diff --git a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs index 87cce9658a..b68ac92ccd 100644 --- a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs +++ b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs @@ -6,7 +6,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.Identity { - public interface IIdentityRoleRepository : IRepository + public interface IIdentityRoleRepository : IBasicRepository { Task FindByNormalizedNameAsync(string normalizedRoleName, CancellationToken cancellationToken); diff --git a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs index d764d69d48..0f6acf0151 100644 --- a/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs +++ b/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs @@ -8,7 +8,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.Identity { - public interface IIdentityUserRepository : IRepository + public interface IIdentityUserRepository : IBasicRepository { Task FindByNormalizedUserNameAsync([NotNull] string normalizedUserName, CancellationToken cancellationToken = default); diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs index 1bc5d4793c..0050584088 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs @@ -5,7 +5,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.IdentityServer.ApiResources { - public interface IApiResourceRepository : IRepository + public interface IApiResourceRepository : IBasicRepository { Task FindByNameAsync(string name, CancellationToken cancellationToken = default); } diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs index d0c54dffd1..df5bc2bd43 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/IClientRepository.cs @@ -5,7 +5,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.IdentityServer.Clients { - public interface IClientRepository : IRepository + public interface IClientRepository : IBasicRepository { Task FindByCliendIdIncludingAllAsync([NotNull] string clientId); } diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs index 53059b4ce9..414484bc51 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs @@ -5,7 +5,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.IdentityServer.Grants { - public interface IPersistentGrantRepository : IRepository + public interface IPersistentGrantRepository : IBasicRepository { Task FindByKeyAsync(string key); diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs index 1312daa1a0..ea207fc9f1 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs @@ -6,7 +6,7 @@ using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; namespace Volo.Abp.IdentityServer.IdentityResources { - public interface IIdentityResourceRepository : IRepository + public interface IIdentityResourceRepository : IBasicRepository { Task> FindIdentityResourcesByScopeAsync(string[] scopeNames); diff --git a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs index 6b89208130..dd241b25a5 100644 --- a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs +++ b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs @@ -3,7 +3,7 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories.MemoryDb { - public interface IMemoryDbRepository : IQueryableRepository + public interface IMemoryDbRepository : IRepository where TEntity : class, IEntity { IMemoryDatabase Database { get; } @@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb List Collection { get; } } - public interface IMemoryDbRepository : IMemoryDbRepository, IQueryableRepository + public interface IMemoryDbRepository : IMemoryDbRepository, IRepository where TEntity : class, IEntity { diff --git a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 72e84d126f..e8fb1fb098 100644 --- a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -8,7 +8,7 @@ using Volo.Abp.MemoryDb; namespace Volo.Abp.Domain.Repositories.MemoryDb { - public class MemoryDbRepository : QueryableRepositoryBase, IMemoryDbRepository + public class MemoryDbRepository : RepositoryBase, IMemoryDbRepository where TMemoryDbContext : MemoryDbContext where TEntity : class, IEntity { diff --git a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs index 4071646c7d..6f940ca146 100644 --- a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs +++ b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs @@ -7,19 +7,19 @@ namespace Volo.Abp.Domain.Repositories { public static class MemoryDbCoreRepositoryExtensions { - public static IMemoryDatabase GetDatabase(this IRepository repository) + public static IMemoryDatabase GetDatabase(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMemoryDbRepository().Database; } - public static List GetCollection(this IRepository repository) + public static List GetCollection(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMemoryDbRepository().Collection; } - public static IMemoryDbRepository ToMemoryDbRepository(this IRepository repository) + public static IMemoryDbRepository ToMemoryDbRepository(this IBasicRepository repository) where TEntity : class, IEntity { var memoryDbRepository = repository as IMemoryDbRepository; diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs index c8f5eb0265..31a39eb3a2 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs @@ -3,7 +3,7 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories.MongoDB { - public interface IMongoDbRepository : IQueryableRepository + public interface IMongoDbRepository : IRepository where TEntity : class, IEntity { IMongoDatabase Database { get; } @@ -13,7 +13,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB string CollectionName { get; } } - public interface IMongoDbRepository : IMongoDbRepository, IQueryableRepository + public interface IMongoDbRepository : IMongoDbRepository, IRepository where TEntity : class, IEntity { diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 348ed9e957..717f9a5771 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -9,7 +9,7 @@ using Volo.Abp.MongoDB; namespace Volo.Abp.Domain.Repositories.MongoDB { - public class MongoDbRepository : QueryableRepositoryBase, IMongoDbRepository + public class MongoDbRepository : RepositoryBase, IMongoDbRepository where TMongoDbContext : AbpMongoDbContext where TEntity : class, IEntity { diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs index dba22e8e1b..02a80cfa3a 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs @@ -7,25 +7,25 @@ namespace Volo.Abp.Domain.Repositories { public static class MongoDbCoreRepositoryExtensions { - public static IMongoDatabase GetDatabase(this IRepository repository) + public static IMongoDatabase GetDatabase(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().Database; } - public static IMongoCollection GetCollection(this IRepository repository) + public static IMongoCollection GetCollection(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().Collection; } - public static string GetCollectionName(this IRepository repository) + public static string GetCollectionName(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().CollectionName; } - public static IMongoDbRepository ToMongoDbRepository(this IRepository repository) + public static IMongoDbRepository ToMongoDbRepository(this IBasicRepository repository) where TEntity : class, IEntity { var mongoDbRepository = repository as IMongoDbRepository; diff --git a/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/ITenantRepository.cs b/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/ITenantRepository.cs index 563cf8dc0d..b1c73774d9 100644 --- a/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/ITenantRepository.cs +++ b/src/Volo.Abp.MultiTenancy.Domain/Volo/Abp/MultiTenancy/ITenantRepository.cs @@ -4,7 +4,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.Abp.MultiTenancy { - public interface ITenantRepository : IRepository + public interface ITenantRepository : IBasicRepository { Task FindByNameIncludeDetailsAsync(string name); diff --git a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs index 7076cdd5e0..031a6d6c89 100644 --- a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs +++ b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs @@ -20,13 +20,13 @@ namespace Volo.Abp.AspNetCore.Mvc public class PersonAppService_Tests : AspNetCoreMvcTestBase { - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; private readonly IJsonSerializer _jsonSerializer; private readonly IObjectMapper _objectMapper; public PersonAppService_Tests() { - _personRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); _jsonSerializer = ServiceProvider.GetRequiredService(); _objectMapper = ServiceProvider.GetRequiredService(); } diff --git a/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index 5f082eb52a..9fc5e2cff8 100644 --- a/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -27,11 +27,11 @@ namespace Volo.Abp.Domain.Repositories //Assert - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); - services.ShouldNotContainService(typeof(IRepository)); + services.ShouldNotContainService(typeof(IBasicRepository)); } [Fact] @@ -50,11 +50,11 @@ namespace Volo.Abp.Domain.Repositories //Assert - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); } [Fact] @@ -75,10 +75,10 @@ namespace Volo.Abp.Domain.Repositories //Assert - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestAggregateRootWithDefaultPkCustomRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestDefaultRepository)); } [Fact] @@ -99,10 +99,10 @@ namespace Volo.Abp.Domain.Repositories //Assert - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestCustomBaseRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestCustomBaseRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestCustomBaseRepository)); - services.ShouldContainTransient(typeof(IRepository), typeof(MyTestCustomBaseRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestCustomBaseRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestCustomBaseRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestCustomBaseRepository)); + services.ShouldContainTransient(typeof(IBasicRepository), typeof(MyTestCustomBaseRepository)); } public class MyTestRepositoryRegistrar : RepositoryRegistrarBase @@ -150,7 +150,7 @@ namespace Volo.Abp.Domain.Repositories public string MyId { get; set; } } - public class MyTestDefaultRepository : RepositoryBase + public class MyTestDefaultRepository : BasicRepositoryBase where TEntity : class, IEntity { public override TEntity Insert(TEntity entity, bool autoSave = false) @@ -169,7 +169,7 @@ namespace Volo.Abp.Domain.Repositories } } - public class MyTestDefaultRepository : MyTestDefaultRepository, IRepository + public class MyTestDefaultRepository : MyTestDefaultRepository, IBasicRepository where TEntity : class, IEntity { public TEntity Get(TKey id) diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs b/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs index 5e7658706c..59ddc2acdf 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests.SecondContext/Volo/Abp/EntityFrameworkCore/TestApp/SecondContext/SecondContextTestDataBuilder.cs @@ -7,10 +7,10 @@ namespace Volo.Abp.EntityFrameworkCore.TestApp.SecondContext { public class SecondContextTestDataBuilder : ITransientDependency { - private readonly IRepository _bookRepository; + private readonly IBasicRepository _bookRepository; private readonly IGuidGenerator _guidGenerator; - public SecondContextTestDataBuilder(IRepository bookRepository, IGuidGenerator guidGenerator) + public SecondContextTestDataBuilder(IBasicRepository bookRepository, IGuidGenerator guidGenerator) { _bookRepository = bookRepository; _guidGenerator = guidGenerator; diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/MultiTenant_Filter_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/MultiTenant_Filter_Tests.cs index e236362bae..976e26ee40 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/MultiTenant_Filter_Tests.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/MultiTenant_Filter_Tests.cs @@ -17,12 +17,12 @@ namespace Volo.Abp.EntityFrameworkCore.DataFiltering public class MultiTenant_Filter_Tests : EntityFrameworkCoreTestBase //TODO: This class is same of Volo.Abp.MemoryDb.DataFilters.MemoryDb_MultiTenant_Filter_Tests. Can we share source code? { private ICurrentTenant _fakeCurrentTenant; - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; private readonly IDataFilter _multiTenantFilter; public MultiTenant_Filter_Tests() { - _personRepository = GetRequiredService>(); + _personRepository = GetRequiredService>(); _multiTenantFilter = GetRequiredService>(); } diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/SoftDelete_Filter_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/SoftDelete_Filter_Tests.cs index f845b2ca5f..c17977e463 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/SoftDelete_Filter_Tests.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DataFiltering/SoftDelete_Filter_Tests.cs @@ -10,12 +10,12 @@ namespace Volo.Abp.EntityFrameworkCore.DataFiltering { public class SoftDelete_Filter_Tests : EntityFrameworkCoreTestBase { - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; private readonly IDataFilter _dataFilter; public SoftDelete_Filter_Tests() { - _personRepository = GetRequiredService>(); + _personRepository = GetRequiredService>(); _dataFilter = GetRequiredService(); } diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs index 755ea0b3f7..8ada582fa6 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs @@ -10,11 +10,11 @@ namespace Volo.Abp.EntityFrameworkCore { public class DbContext_Replace_Tests : EntityFrameworkCoreTestBase { - private readonly IRepository _dummyRepository; + private readonly IBasicRepository _dummyRepository; public DbContext_Replace_Tests() { - _dummyRepository = ServiceProvider.GetRequiredService>(); + _dummyRepository = ServiceProvider.GetRequiredService>(); } [Fact] diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Tests.cs index 7a98204652..f0ef9066f2 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Tests.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Repositories/Repository_Tests.cs @@ -12,15 +12,15 @@ namespace Volo.Abp.EntityFrameworkCore.Repositories { public class Repository_Tests : EntityFrameworkCoreTestBase { - private readonly IQueryableRepository _personRepository; - private readonly IQueryableRepository _bookRepository; - private readonly IQueryableRepository _phoneInSecondDbContextRepository; + private readonly IRepository _personRepository; + private readonly IRepository _bookRepository; + private readonly IRepository _phoneInSecondDbContextRepository; public Repository_Tests() { - _personRepository = ServiceProvider.GetRequiredService>(); - _bookRepository = ServiceProvider.GetRequiredService>(); - _phoneInSecondDbContextRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); + _bookRepository = ServiceProvider.GetRequiredService>(); + _phoneInSecondDbContextRepository = ServiceProvider.GetRequiredService>(); } [Fact] diff --git a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transaction_Tests.cs b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transaction_Tests.cs index 58fe4b0a38..d37471ee9b 100644 --- a/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transaction_Tests.cs +++ b/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Transaction_Tests.cs @@ -12,14 +12,14 @@ namespace Volo.Abp.EntityFrameworkCore { public class Transaction_Tests : EntityFrameworkCoreTestBase { - private readonly IRepository _personRepository; - private readonly IRepository _bookRepository; + private readonly IBasicRepository _personRepository; + private readonly IBasicRepository _bookRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public Transaction_Tests() { - _personRepository = ServiceProvider.GetRequiredService>(); - _bookRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); + _bookRepository = ServiceProvider.GetRequiredService>(); _unitOfWorkManager = ServiceProvider.GetRequiredService(); } diff --git a/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs b/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs index 858b2e007a..568de29522 100644 --- a/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs +++ b/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs @@ -15,12 +15,12 @@ namespace Volo.Abp.Http.DynamicProxying public class PersonAppServiceClientProxy_Tests : AbpHttpTestBase { private readonly IPeopleAppService _peopleAppService; - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; public PersonAppServiceClientProxy_Tests() { _peopleAppService = ServiceProvider.GetRequiredService(); - _personRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); } [Fact] diff --git a/test/Volo.Abp.Identity.Tests/Volo/Abp/Identity/Initialize_Tests.cs b/test/Volo.Abp.Identity.Tests/Volo/Abp/Identity/Initialize_Tests.cs index b6a970e827..69b50be7f7 100644 --- a/test/Volo.Abp.Identity.Tests/Volo/Abp/Identity/Initialize_Tests.cs +++ b/test/Volo.Abp.Identity.Tests/Volo/Abp/Identity/Initialize_Tests.cs @@ -26,10 +26,10 @@ namespace Volo.Abp.Identity { (ServiceProvider.GetRequiredService() is EfCoreIdentityUserRepository).ShouldBeTrue(); - (ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); + (ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); //(ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); - (ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); + (ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); //(ServiceProvider.GetRequiredService>() is EfCoreIdentityUserRepository).ShouldBeTrue(); } } diff --git a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MemoryDb_SoftDelete_DataFilter_Tests.cs b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MemoryDb_SoftDelete_DataFilter_Tests.cs index 2bf2b7f612..1d73b94561 100644 --- a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MemoryDb_SoftDelete_DataFilter_Tests.cs +++ b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MemoryDb_SoftDelete_DataFilter_Tests.cs @@ -11,12 +11,12 @@ namespace Volo.Abp.MemoryDb.DataFilters { public class MemoryDb_SoftDelete_DataFilter_Tests : MemoryDbTestBase { - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; private readonly IDataFilter _dataFilter; public MemoryDb_SoftDelete_DataFilter_Tests() { - _personRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); _dataFilter = GetRequiredService(); } diff --git a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MultiTenant_Filter_Tests.cs b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MultiTenant_Filter_Tests.cs index 9df33e4899..d5bd1eff73 100644 --- a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MultiTenant_Filter_Tests.cs +++ b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DataFilters/MultiTenant_Filter_Tests.cs @@ -16,12 +16,12 @@ namespace Volo.Abp.MemoryDb.DataFilters public class MemoryDb_MultiTenant_Filter_Tests : MemoryDbTestBase { private ICurrentTenant _fakeCurrentTenant; - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; private readonly IDataFilter _multiTenantFilter; public MemoryDb_MultiTenant_Filter_Tests() { - _personRepository = GetRequiredService>(); + _personRepository = GetRequiredService>(); _multiTenantFilter = GetRequiredService>(); } diff --git a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/MemoryDb_Basic_Repository_Tests.cs b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/MemoryDb_Basic_Repository_Tests.cs index 3efb7d775e..f96cbf7107 100644 --- a/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/MemoryDb_Basic_Repository_Tests.cs +++ b/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/Repositories/MemoryDb_Basic_Repository_Tests.cs @@ -10,11 +10,11 @@ namespace Volo.Abp.MemoryDb.Repositories { public class MemoryDb_Basic_Repository_Tests : MemoryDbTestBase { - private readonly IQueryableRepository _personRepository; + private readonly IRepository _personRepository; public MemoryDb_Basic_Repository_Tests() { - _personRepository = ServiceProvider.GetRequiredService>(); + _personRepository = ServiceProvider.GetRequiredService>(); } [Fact] diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs index bd21d9cf3f..05c6afb7dc 100644 --- a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/PeopleAppService.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.TestApp.Application { public class PeopleAppService : AsyncCrudAppService, IPeopleAppService { - public PeopleAppService(IQueryableRepository repository) + public PeopleAppService(IRepository repository) : base(repository) { diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs index a87691ffe8..edc94b51ff 100644 --- a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs @@ -10,9 +10,9 @@ namespace Volo.Abp.TestApp public static Guid TenantId1 { get; } = new Guid("55687dce-595c-41b4-a024-2a5e991ac8f4"); public static Guid TenantId2 { get; } = new Guid("f522d19f-5a86-4278-98fb-0577319c544a"); - private readonly IRepository _personRepository; + private readonly IBasicRepository _personRepository; - public TestDataBuilder(IRepository personRepository) + public TestDataBuilder(IBasicRepository personRepository) { _personRepository = personRepository; }