@ -12,9 +12,9 @@ using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Domain.Repositories.MongoDB
{
//TODO: Use GetCancellationToken() method!
public class MongoDbRepository < TMongoDbContext , TEntity > : RepositoryBase < TEntity > , IMongoDbRepository < TEntity >
public class MongoDbRepository < TMongoDbContext , TEntity >
: RepositoryBase < TEntity > ,
IMongoDbRepository < TEntity >
where TMongoDbContext : IAbpMongoDbContext
where TEntity : class , IEntity
{
@ -37,61 +37,105 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity ;
}
public override async Task < TEntity > InsertAsync ( TEntity entity , bool autoSave = false , CancellationToken cancellationToken = default )
public override async Task < TEntity > InsertAsync (
TEntity entity ,
bool autoSave = false ,
CancellationToken cancellationToken = default )
{
await Collection . InsertOneAsync ( entity , cancellationToken : cancellationToken ) ;
await Collection . InsertOneAsync (
entity ,
cancellationToken : GetCancellationToken ( cancellationToken )
) ;
return entity ;
}
public override TEntity Update ( TEntity entity , bool autoSave = false )
{
Collection . ReplaceOne ( CreateEntityFilter ( entity ) , entity ) ;
Collection . ReplaceOne (
CreateEntityFilter ( entity ) ,
entity
) ;
return entity ;
}
public override async Task < TEntity > UpdateAsync ( TEntity entity , bool autoSave = false , CancellationToken cancellationToken = default )
public override async Task < TEntity > UpdateAsync (
TEntity entity ,
bool autoSave = false ,
CancellationToken cancellationToken = default )
{
await Collection . ReplaceOneAsync ( CreateEntityFilter ( entity ) , entity , cancellationToken : cancellationToken ) ;
await Collection . ReplaceOneAsync (
CreateEntityFilter ( entity ) ,
entity ,
cancellationToken : GetCancellationToken ( cancellationToken )
) ;
return entity ;
}
public override void Delete ( TEntity entity , bool autoSave = false )
{
Collection . DeleteOne ( CreateEntityFilter ( entity ) ) ;
Collection . DeleteOne (
CreateEntityFilter ( entity )
) ;
}
public override async Task DeleteAsync ( TEntity entity , bool autoSave = false , CancellationToken cancellationToken = default )
public override async Task DeleteAsync (
TEntity entity ,
bool autoSave = false ,
CancellationToken cancellationToken = default )
{
await Collection . DeleteOneAsync ( CreateEntityFilter ( entity ) , cancellationToken ) ;
await Collection . DeleteOneAsync (
CreateEntityFilter ( entity ) ,
GetCancellationToken ( cancellationToken )
) ;
}
public override void Delete ( Expression < Func < TEntity , bool > > predicate , bool autoSave = false )
{
Collection . DeleteMany ( Builders < TEntity > . Filter . Where ( predicate ) ) ;
Collection . DeleteMany (
Builders < TEntity > . Filter . Where ( predicate )
) ;
}
public override async Task DeleteAsync ( Expression < Func < TEntity , bool > > predicate , bool autoSave = false , CancellationToken cancellationToken = default )
public override async Task DeleteAsync (
Expression < Func < TEntity , bool > > predicate ,
bool autoSave = false ,
CancellationToken cancellationToken = default )
{
await Collection . DeleteManyAsync ( Builders < TEntity > . Filter . Where ( predicate ) , cancellationToken ) ;
await Collection . DeleteManyAsync (
Builders < TEntity > . Filter . Where ( predicate ) ,
GetCancellationToken ( cancellationToken )
) ;
}
protected override IQueryable < TEntity > GetQueryable ( )
{
return ApplyDataFilters ( Collection . AsQueryable ( ) ) ;
return ApplyDataFilters (
Collection . AsQueryable ( )
) ;
}
protected virtual IMongoQueryable < TEntity > GetMongoQueryable ( )
{
return ApplyDataFilters ( Collection . AsQueryable ( ) ) ;
return ApplyDataFilters (
Collection . AsQueryable ( )
) ;
}
protected virtual FilterDefinition < TEntity > CreateEntityFilter ( TEntity entity )
{
throw new NotImplementedException ( "CreateEntityFilter is not implemented for MongoDb by default. It should be overrided and implemented by deriving classes!" ) ;
throw new NotImplementedException (
$"{nameof(CreateEntityFilter)} is not implemented for MongoDB by default. " +
$"It should be overrided and implemented by the deriving class!"
) ;
}
}
public class MongoDbRepository < TMongoDbContext , TEntity , TKey > : MongoDbRepository < TMongoDbContext , TEntity > , IMongoDbRepository < TEntity , TKey >
public class MongoDbRepository < TMongoDbContext , TEntity , TKey >
: MongoDbRepository < TMongoDbContext , TEntity > ,
IMongoDbRepository < TEntity , TKey >
where TMongoDbContext : IAbpMongoDbContext
where TEntity : class , IEntity < TKey >
{
@ -113,7 +157,10 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity ;
}
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 ) ;
@ -125,9 +172,14 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
return entity ;
}
public virtual async Task < TEntity > FindAsync ( TKey id , bool includeDetails = true , 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 ( GetCancellationToken ( cancellationToken ) ) ;
}
public virtual TEntity Find ( TKey id , bool includeDetails = true )
@ -140,9 +192,15 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
Collection . DeleteOne ( CreateEntityFilter ( id ) ) ;
}
public virtual Task DeleteAsync ( TKey id , bool autoSave = false , CancellationToken cancellationToken = default )
public virtual Task DeleteAsync (
TKey id ,
bool autoSave = false ,
CancellationToken cancellationToken = default )
{
return Collection . DeleteOneAsync ( CreateEntityFilter ( id ) , cancellationToken ) ;
return Collection . DeleteOneAsync (
CreateEntityFilter ( id ) ,
GetCancellationToken ( cancellationToken )
) ;
}
protected override FilterDefinition < TEntity > CreateEntityFilter ( TEntity entity )