Browse Source

Merge pull request #23638 from abpframework/add-provider-info-to-repository

Add provider name support to repository infrastructure
pull/23642/head
Ma Liming 1 year ago
committed by GitHub
parent
commit
d9840664bd
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 14
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
  2. 6
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs
  3. 10
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
  4. 4
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
  5. 1
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
  6. 6
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEfCoreConsts.cs
  7. 1
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
  8. 6
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/AbpMemoryDbConsts.cs
  9. 1
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
  10. 6
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbConsts.cs
  11. 11
      framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs

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

@ -44,16 +44,18 @@ public abstract class BasicRepositoryBase<TEntity> :
public bool? IsChangeTrackingEnabled { get; protected set; } public bool? IsChangeTrackingEnabled { get; protected set; }
protected string? EntityName { get; private set; } public string? EntityName { get; set; }
public void SetEntityName(string? name) public void SetEntityName(string? name)
{ {
EntityName = name; EntityName = name;
} }
protected BasicRepositoryBase() public string ProviderName { get; }
{
protected BasicRepositoryBase(string providerName)
{
ProviderName = Check.NotNullOrWhiteSpace(providerName, nameof(providerName));
} }
public abstract Task<TEntity> InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default); public abstract Task<TEntity> InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default);
@ -146,6 +148,12 @@ public abstract class BasicRepositoryBase<TEntity> :
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>
{ {
protected BasicRepositoryBase(string providerName)
: base(providerName)
{
}
public virtual async Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) public virtual async Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
{ {
var entity = await FindAsync(id, includeDetails, cancellationToken); var entity = await FindAsync(id, includeDetails, cancellationToken);

6
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IRepository.cs

@ -8,13 +8,15 @@ using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Domain.Repositories; namespace Volo.Abp.Domain.Repositories;
/// <summary> /// <summary>
/// Just to mark a class as repository. /// The base interface to implement a repository for an entity.
/// </summary> /// </summary>
public interface IRepository public interface IRepository
{ {
bool? IsChangeTrackingEnabled { get; } bool? IsChangeTrackingEnabled { get; }
void SetEntityName(string? name); string? EntityName { get; set; }
string ProviderName { get; }
} }
public interface IRepository<TEntity> : IReadOnlyRepository<TEntity>, IBasicRepository<TEntity> public interface IRepository<TEntity> : IReadOnlyRepository<TEntity>, IBasicRepository<TEntity>

10
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs

@ -14,6 +14,11 @@ namespace Volo.Abp.Domain.Repositories;
public abstract class RepositoryBase<TEntity> : BasicRepositoryBase<TEntity>, IRepository<TEntity>, IUnitOfWorkManagerAccessor public abstract class RepositoryBase<TEntity> : BasicRepositoryBase<TEntity>, IRepository<TEntity>, IUnitOfWorkManagerAccessor
where TEntity : class, IEntity where TEntity : class, IEntity
{ {
protected RepositoryBase(string providerName)
: base(providerName)
{
}
[Obsolete("Use WithDetailsAsync method.")] [Obsolete("Use WithDetailsAsync method.")]
public virtual IQueryable<TEntity> WithDetails() public virtual IQueryable<TEntity> WithDetails()
{ {
@ -92,6 +97,11 @@ public abstract class RepositoryBase<TEntity> : BasicRepositoryBase<TEntity>, IR
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>
{ {
protected RepositoryBase(string providerName)
: base(providerName)
{
}
public abstract Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default); public abstract Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);
public abstract Task<TEntity?> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default); public abstract Task<TEntity?> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);

4
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs

@ -251,12 +251,12 @@ public static class RepositoryExtensions
await repository.DeleteAsync(entity, autoSave, cancellationToken); await repository.DeleteAsync(entity, autoSave, cancellationToken);
} }
public static TRepository WithEntityName<TRepository>( public static TRepository SetEntityName<TRepository>(
this TRepository repository, this TRepository repository,
string name string name
) where TRepository : class, IRepository ) where TRepository : class, IRepository
{ {
repository.SetEntityName(name); repository.EntityName = name;
return repository; return repository;
} }
} }

1
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs

@ -93,6 +93,7 @@ public class EfCoreRepository<TDbContext, TEntity> : RepositoryBase<TEntity>, IE
public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>(); public IEfCoreBulkOperationProvider? BulkOperationProvider => LazyServiceProvider.LazyGetService<IEfCoreBulkOperationProvider>();
public EfCoreRepository(IDbContextProvider<TDbContext> dbContextProvider) public EfCoreRepository(IDbContextProvider<TDbContext> dbContextProvider)
: base(AbpEfCoreConsts.ProviderName)
{ {
_dbContextProvider = dbContextProvider; _dbContextProvider = dbContextProvider;

6
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEfCoreConsts.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.EntityFrameworkCore;
public class AbpEfCoreConsts
{
public const string ProviderName = "Volo.Abp.EntityFrameworkCore";
}

1
framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs

@ -50,6 +50,7 @@ public class MemoryDbRepository<TMemoryDbContext, TEntity> : RepositoryBase<TEnt
public IAuditPropertySetter AuditPropertySetter => LazyServiceProvider.LazyGetRequiredService<IAuditPropertySetter>(); public IAuditPropertySetter AuditPropertySetter => LazyServiceProvider.LazyGetRequiredService<IAuditPropertySetter>();
public MemoryDbRepository(IMemoryDatabaseProvider<TMemoryDbContext> databaseProvider) public MemoryDbRepository(IMemoryDatabaseProvider<TMemoryDbContext> databaseProvider)
: base(AbpMemoryDbConsts.ProviderName)
{ {
DatabaseProvider = databaseProvider; DatabaseProvider = databaseProvider;
} }

6
framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/AbpMemoryDbConsts.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.MemoryDb;
public class AbpMemoryDbConsts
{
public const string ProviderName = "Volo.Abp.MemoryDb";
}

1
framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs

@ -101,6 +101,7 @@ public class MongoDbRepository<TMongoDbContext, TEntity>
public IMongoDbRepositoryFilterer<TEntity> RepositoryFilterer => LazyServiceProvider.LazyGetService<IMongoDbRepositoryFilterer<TEntity>>()!; public IMongoDbRepositoryFilterer<TEntity> RepositoryFilterer => LazyServiceProvider.LazyGetService<IMongoDbRepositoryFilterer<TEntity>>()!;
public MongoDbRepository(IMongoDbContextProvider<TMongoDbContext> dbContextProvider) public MongoDbRepository(IMongoDbContextProvider<TMongoDbContext> dbContextProvider)
: base(AbpMongoDbConsts.ProviderName)
{ {
DbContextProvider = dbContextProvider; DbContextProvider = dbContextProvider;
} }

6
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbConsts.cs

@ -0,0 +1,6 @@
namespace Volo.Abp.MongoDB;
public class AbpMongoDbConsts
{
public const string ProviderName = "Volo.Abp.MongoDB";
}

11
framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs

@ -295,6 +295,10 @@ public class RepositoryRegistration_Tests
public class MyTestDefaultRepository<TEntity> : RepositoryBase<TEntity> public class MyTestDefaultRepository<TEntity> : RepositoryBase<TEntity>
where TEntity : class, IEntity where TEntity : class, IEntity
{ {
public MyTestDefaultRepository()
: base("MyTestDefault")
{
}
[Obsolete("Use GetQueryableAsync method.")] [Obsolete("Use GetQueryableAsync method.")]
protected override IQueryable<TEntity> GetQueryable() protected override IQueryable<TEntity> GetQueryable()
@ -408,11 +412,8 @@ public class RepositoryRegistration_Tests
public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository public class MyTestAggregateRootWithDefaultPkEmptyRepository : IMyTestAggregateRootWithDefaultPkEmptyRepository
{ {
public bool? IsChangeTrackingEnabled { get; set; } public bool? IsChangeTrackingEnabled { get; set; }
public string EntityName { get; set; }
public void SetEntityName(string name) public string ProviderName { get; } = "MyFakeProvider";
{
}
} }
public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions public class TestDbContextRegistrationOptions : AbpCommonDbContextRegistrationOptions

Loading…
Cancel
Save